C#-Socket:客户端以及服务器端代码
文章转自:http://www.beijibear.com/?aid=370
服务器端:
View Code
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Net;
6 using System.Net.Sockets;
7 using System.Threading;
8
9 namespace ConsoleApplication1
10 {
11 class TestServer
12 {
13 static Socket serverSocket;
14 static Socket clientSocket;
15 static Thread thread;
16 static void Main(string[] args)
17 {
18 //将网络端点表示为IP地址和端口 用于socket侦听时绑定
19 IPEndPoint ipep = new IPEndPoint(IPAddress.Any,3001);
20 //使用指定的地址族、套接字类型和协议初始化 Socket 类的新实例。
21 serverSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
22 //将所创建的Socket与IPEndPoint绑定
23 serverSocket.Bind(ipep);
24 //设置套接字为收听模式 定队列中最多可容纳的等待接受的传入连接数为10
25 serverSocket.Listen(10);
26 //在Socket上接收接入的连接
27 while (true) {
28 //serverSocket.Accept()接收客户端Socket的连接请求 当程序运行到serverSocket.Accept()时会等待直到有客户端Socket发起连接请求时 获取客户端Socket
29 clientSocket = serverSocket.Accept();
30
31 thread = new Thread(new ThreadStart(TestServer.doWork));
32 thread.Start();
33
34 }
35 }
36 private static void doWork(){
37 Socket s = clientSocket;
38
39 //客户端信息
40 IPEndPoint ipEndPoint = (IPEndPoint)s.RemoteEndPoint;
41 String address = ipEndPoint.Address.ToString();
42 String port = ipEndPoint.Port.ToString();
43 Console.WriteLine(address+":"+port+" 连接过来了");
44
45 Byte[] inBuffer = new Byte[1024];
46 Byte[] outBuffer = new Byte[1024];
47 String inBufferStr;
48 String outBufferStr;
49 while (true)
50 {
51 s.Receive(inBuffer, 1024, SocketFlags.None);//如果接收的消息为空 阻塞 当前循环
52
53 inBufferStr = Encoding.ASCII.GetString(inBuffer);
54
55 Console.WriteLine(address + ":" + port + "说:");
56 Console.WriteLine(inBufferStr);
57
58 outBufferStr = "Welcome To Server";
59
60 outBuffer = Encoding.ASCII.GetBytes(outBufferStr);
61 s.Send(outBuffer, outBuffer.Length, SocketFlags.None);
62 }
63 }
64
65 }
66 }
客户端:
View Code
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Net;
6 using System.Net.Sockets;
7
8 namespace ConsoleApplication2
9 {
10 class TestClient
11 {
12 static Socket clientSocket;
13 static void Main(string[] args)
14 {
15 //将网络端点表示为IP地址和端口 用于socket侦听时绑定
16 IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3001);
17
18 clientSocket = new Socket(ipep.AddressFamily,SocketType.Stream,ProtocolType.Tcp);
19
20 //将Socket连接到服务器
21 clientSocket.Connect(ipep);
22
23 String outBufferStr;
24 Byte[] outBuffer = new Byte[1024];
25 Byte[] inBuffer = new Byte[1024];
26 while (true)
27 {
28 //发送消息
29 outBufferStr = Console.ReadLine();
30
31 outBuffer = Encoding.ASCII.GetBytes(outBufferStr);
32 clientSocket.Send(outBuffer, outBuffer.Length, SocketFlags.None);
33
34 Console.WriteLine("服务器响应:");
35 //接收服务器端信息
36 clientSocket.Receive(inBuffer, 1024, SocketFlags.None);
37 Console.WriteLine(Encoding.ASCII.GetString(inBuffer));
38 }
39 }
40 }
41 }
以上的代码很简单,但可以实现服务器端和客户端的通信,但是代码中存在隐患,因为只是入门级别的,所以作者没有考虑到那么多。


浙公网安备 33010602011771号