Socket编程-tcp服务端和客户端通信

清疚 2021-09-16 15:56 722阅读 0赞

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

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

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

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

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

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

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

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

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

70

首先引入命名空间:using System.Net; using System.Net.Sockets;

服务端:

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

客户端:

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

70 1

发表评论

表情:
评论列表 (有 0 条评论,722人围观)

还没有评论,来说两句吧...

相关阅读