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();
客户端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();
其中有代码Encoding.UTF8
这一块是设置编码,使用Unicode再用中文的时候会发生乱码????类试与这一的,编码服务端跟客户端必须一致,不然也会出现乱码行为,不过咱这一般都用Encoding.UTF8就OK的啦