C#TCP通信

Socket原理:服务端有一个进程(或者多个进程)在指定端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按设计的数据交换方法和格式进行数据传输。客户端在需要的时刻发出向服务器端的连接请求。

在使用TCP协议时,一般服务端进程先使用socket调用得到一个描述符,然后使用bind调用将一个名字与socket描述符连接起来,对于Internet域就是将Internet地址联编到socket。之后,服务端使用listen调用指出等待服务请求队列的长度。然后就可以使用accept调用等待客户端发起连接,一般是阻塞等待连接,一旦有客户端发出连接,accept返回客户的地址信息,并返回一个新的socket描述符,该描述符与原先的socket有相同的特性,这时服务端就可以使用这个新的socket进行读写操作了。一般服务端可能在accept返回后创建一个新的进程进行与客户的通信,父进程则再到accept调用处等待另一个连接。客户端进程一般先使用socket调用得到一个socket描述符,然后使用connect向指定的服务器上的指定端口发起连接,一旦连接成功返回,就说明已经建立了与服务器的连接,这时就可以通过socket描述符进行读写操作了。

[csharp] view plain copy

1. ///

2. /// 服务端 3. ///

4. ///

9. int port = 2000;

10. string host = \;

11. IPAddress ip = IPAddress.Parse(host); 12. IPEndPoint ipe = new IPEndPoint(ip, port);

13. Socket s = new Socket(AddressFamily.InterNetwork, Soc

ketType.Stream, ProtocolType.Tcp);//创建一个Socket类 14. s.Bind(ipe);//绑定2000端口 15. s.Listen(0);//开始监听

16. Console.WriteLine(\);

17. Socket temp = s.Accept();//为新建连接创建新的Socket。 18. Console.WriteLine(\); 19. string recvStr = \;

20. byte[] recvBytes = new byte[1024]; 21. int bytes;

22. bytes = temp.Receive(recvBytes, recvBytes.Length, 0);

//从客户端接受信息

23. recvStr += Encoding.ASCII.GetString(recvBytes, 0, byt

es);

24. if (recvStr==\) 25. {

26. Console.WriteLine(\阅卷完成!\); 27. }

28. Console.WriteLine(\, recvStr);

//把客户端传来的信息显示出来

29. string sendStr = \;

30. byte[] bs = Encoding.ASCII.GetBytes(sendStr); 31. temp.Send(bs, bs.Length, 0);//返回客户端成功信息 32. temp.Close(); 33. s.Close(); 34. }

35. catch (ArgumentNullException e) 36. {

37. Console.WriteLine(\, e); 38. }

39. catch (SocketException e) 40. {

41. Console.WriteLine(\, e); 42. }

43. Console.WriteLine(\); 44. Console.ReadLine(); 45. } 46. }

[csharp] view plain copy

1. ///

2. /// 客户端 3. ///

4. ///

8. {

9. int port = 2000;

10. string host = \;

11. IPAddress ip = IPAddress.Parse(host);

12. IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口

转化为IPEndPoint实例

13. Socket c = new Socket(AddressFamily.InterNetwork, Sock

etType.Stream, ProtocolType.Tcp);//创建一个Socket 14. Console.WriteLine(\); 15. c.Connect(ipe);//连接到服务器 16. string sendStr = \;

17. byte[] bs = Encoding.ASCII.GetBytes(sendStr); 18. Console.WriteLine(\); 19. c.Send(bs, bs.Length, 0);//发送测试信息 20. string recvStr = \;

21. byte[] recvBytes = new byte[1024]; 22. int bytes;

23. bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从

服务器端接受返回信息

24. recvStr += Encoding.ASCII.GetString(recvBytes, 0, byte

s);

25. Console.WriteLine(\, recvStr);/

/显示服务器返回信息 26. c.Close(); 27. }

28. catch (ArgumentNullException e) 29. {

30. Console.WriteLine(\, e); 31. }

32. catch (SocketException e) 33. {

34. Console.WriteLine(\, e); 35. }

36. Console.WriteLine(\); 37. Console.ReadLine(); 38. }

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4