当前位置:   article > 正文

C#编程 socket编程之tcp服务器端和客户端

tcpserver socket.av c#

基于Tcp协议的Socket通讯类似于B/S架构,面向连接,但不同的是服务器端可以向客户端主动推送消息。

使用Tcp协议通讯需要具备以下几个条件:

(1).建立一个套接字(Socket)

(2).绑定服务器端IP地址及端口号--服务器端

(3).利用Listen()方法开启监听--服务器端

(4).利用Accept()方法尝试与客户端建立一个连接--服务器端

(5).利用Connect()方法与服务器建立连接--客户端

(6).利用Send()方法向建立连接的主机发送消息

(7).利用Recive()方法接受来自建立连接的主机的消息(可靠连接)

 

下面用代码实现简单的服务器---客户端通信,在此实例中两方只能收发一次消息,如果要进行多次消息,要使用到线程。

服务器端:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace _021_socket编程_TCP协议 {
  9. class Program {
  10. static void Main(string[] args) {
  11. // 1,创建socket
  12. Socket tcpServer = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
  13. //2,绑定ip跟端口号
  14. IPAddress ipaddress = new IPAddress(new byte[]{192,168,1,101});
  15. EndPoint point = new IPEndPoint(ipaddress,7788);//ipendpoint是对ip+端口做了一层封装的类
  16. tcpServer.Bind(point);//向操作系统申请一个可用的ip跟端口号 用来做通信
  17. //3,开始监听 (等待客户端连接)
  18. tcpServer.Listen(100);//参数是最大连接数
  19. Console.WriteLine("开始监听");
  20. Socket clientSocket = tcpServer.Accept();//暂停当前线程,直到有一个客户端连接过来,之后进行下面的代码
  21. Console.WriteLine("一个客户端连接过来了");
  22. //使用返回的socket跟客户端做通信
  23. string message = "hello 欢迎你";
  24. byte[] data = Encoding.UTF8.GetBytes(message);//对字符串做编码,得到一个字符串的字节数组
  25. clientSocket.Send(data);
  26. Console.WriteLine("向客户端发送了一条数据");
  27. byte[] data2 = new byte[1024];//创建一个字节数组用来当做容器,去承接客户端发送过来的数据
  28. int length = clientSocket.Receive(data2);
  29. string message2 = Encoding.UTF8.GetString(data2, 0, length);//把字节数据转化成 一个字符串
  30. Console.WriteLine("接收到了一个从客户端发送过来的消息:"+message2);
  31. Console.ReadKey();
  32. }
  33. }
  34. }

 客户端:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace _001_socket编程_tcp协议_客户端 {
  9. class Program {
  10. static void Main(string[] args) {
  11. //1,创建socket
  12. Socket tcpClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
  13. //2,发起建立连接的请求
  14. IPAddress ipaddress = IPAddress.Parse("192.168.1.101");//可以把一个字符串的ip地址转化成一个ipaddress的对象
  15. EndPoint point = new IPEndPoint(ipaddress,7788);
  16. tcpClient.Connect(point);//通过ip:端口号 定位一个要连接到的服务器端
  17. byte[] data = new byte[1024];
  18. int length = tcpClient.Receive(data);//这里传递一个byte数组,实际上这个data数组用来接收数据
  19. //length返回值表示接收了多少字节的数据
  20. string message = Encoding.UTF8.GetString(data,0,length);//只把接收到的数据做一个转化
  21. Console.WriteLine(message);
  22. //向服务器端发送消息
  23. string message2 = Console.ReadLine();//读取用户的输入 把输入发送到服务器端
  24. tcpClient.Send( Encoding.UTF8.GetBytes(message2) );//把字符串转化成字节数组,然后发送到服务器端
  25. Console.ReadKey();
  26. }
  27. }
  28. }

执行过程:

(1)首先开启服务器

(2)然后开启客户端,此时,客户端连接到服务器,收到服务器发来的消息

(3)在客户端输入一条消息发给服务器

转载于:https://www.cnblogs.com/lmx282110xxx/p/10798679.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/147277
推荐阅读
相关标签
  

闽ICP备14008679号