Socket通讯简易学习

Socket打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求——接受请求,创建专用链接进行读写——处理完毕,关闭专用链接——关闭通信通道(当然其中监听到关闭专用链接可以重复循环)

Ø  客户端:打开通信通道,连接服务器——数据交互——关闭信道。

服务端server代码

 1  try
 2             {
 3                 bool types = true;
 4                 while (types != false)
 5                 {
 6 
 7                     int port = 2000;
 8 
 9                     string host = "127.0.0.1";
10 
11                     IPAddress ip = IPAddress.Parse(host);
12 
13                     IPEndPoint ipe = new IPEndPoint(ip, port);
14 
15                     Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类
16 
17                     s.Bind(ipe);//绑定2000端口
18 
19                     s.Listen(0);//开始监听
20 
21                     Console.WriteLine("等待与我配对");
22 
23                     Socket temp = s.Accept();//为新建连接创建新的Socket。
24 
25                     Console.WriteLine("正在配对..");
26 
27                     string recvStr = "";
28 
29                     byte[] recvBytes = new byte[1024];
30 
31                     int bytes;
32 
33                     bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
34 
35                    // recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
36                     //recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
37                     recvStr += Encoding.UTF8.GetString(recvBytes,0,bytes);
38                     
39                   // recvStr+= Encoding.Unicode.GetChars(recvBytes);
40                     Console.WriteLine("配对人跟我讲:{0}", recvStr);//把客户端传来的信息显示出来
41 
42                     string sendStr = "我回配对人说可以配对Ok!Client Send Message Sucessful!";
43 
44                     byte[] bs = Encoding.UTF8.GetBytes(sendStr);
45 
46                     temp.Send(bs, bs.Length, 0);//返回客户端成功信息
47 
48                     temp.Close();
49 
50                     s.Close();
51                 }
52 
53             }
54 
55             catch (ArgumentNullException e)
56             {
57 
58                 Console.WriteLine("ArgumentNullException: {0}", e);
59             }
60 
61             catch (SocketException e)
62             {
63 
64                 Console.WriteLine("SocketException: {0}", e);
65             }
66 
67             Console.WriteLine("Press Enter to Exit");
68 
69             Console.ReadLine();
View Code

客户端Client代码

 1 try
 2             {
 3 
 4                 int port = 2000;
 5 
 6                 string host = "127.0.0.1";
 7 
 8                 IPAddress ip = IPAddress.Parse(host);
 9 
10                 IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
11 
12                 Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
13 
14                 Console.WriteLine("正在连接配对...");
15 
16                 c.Connect(ipe);//连接到服务器
17 
18                 string sendStr = "你好,我是hello!This is a socket test";
19                 Encoding.Unicode.GetBytes(sendStr);
20                // byte[] bs = Encoding.ASCII.GetBytes(sendStr);
21                 byte[] bs = Encoding.UTF8.GetBytes(sendStr);
22 
23                 Console.WriteLine("Send Message");
24 
25                 c.Send(bs, bs.Length, 0);//发送测试信息
26 
27                 string recvStr = "";
28 
29                 byte[] recvBytes = new byte[1024];
30 
31                 int bytes;
32 
33                 bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
34 
35                 recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
36 
37                 Console.WriteLine("客户端接收到服务器说:{0}", recvStr);//显示服务器返回信息
38 
39                 c.Close();
40 
41                 Console.WriteLine("下面开始正常对话……");
42                 bool trys = true;
43                
44                 while (trys != false)
45                 {
46                     bs = null;
47                   string pika=  Console.ReadLine();
48                    bs= Encoding.UTF8.GetBytes(pika);
49 
50                    c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
51 
52                    c.Connect(ipe);//连接到服务器
53                    c.Send(bs, bs.Length, 0);//发送测试信息
54                    string recvStr1 = "";
55 
56                    byte[] recvBytes1 = new byte[1024];
57 
58                    int bytes1;
59 
60                    bytes1 = c.Receive(recvBytes1, recvBytes1.Length, 0);//从服务器端接受返回信息
61 
62                    recvStr1 += Encoding.UTF8.GetString(recvBytes1, 0, bytes1);
63 
64                    Console.WriteLine("客户端接收到服务器说:{0}", recvStr1);//显示服务器返回信息
65 
66                    c.Close();
67                 }
68 
69             }
70 
71             catch (ArgumentNullException e)
72             {
73 
74                 Console.WriteLine("ArgumentNullException: {0}", e);
75 
76             }
77 
78             catch (SocketException e)
79             {
80 
81                 Console.WriteLine("SocketException: {0}", e);
82 
83             }
84 
85             Console.WriteLine("Press Enter to Exit");
86 
87             Console.ReadLine();
View Code

其中有代码Encoding.UTF8

这一块是设置编码,使用Unicode再用中文的时候会发生乱码????类试与这一的,编码服务端跟客户端必须一致,不然也会出现乱码行为,不过咱这一般都用Encoding.UTF8就OK的啦

posted @ 2018-12-10 10:36  小阿雄  阅读(153)  评论(0编辑  收藏  举报