C#中的网络通信Socket

前言

在传输层使用的传输协议是TCP和UDP协议。那么在编程的实现过程中就需要使用Socket来实现所谓的数据传输。

TCP:传输控制协议/因特网互联协议,又叫网络通讯协议。

简单解释就是TCP控制传输数据,负责发送传输的问题,一旦有问题就发出信号要求重新传输,直到所有数据安全正确地传输到目的地,而IP是负责给因特网中每台PC定义一个地址,便于标记后传输的。

网络通信中的Socket

在网络通信中实现Socket得需要两个端口,客户端和服务端。在服务端实时接收等待客户端的连接,二者连接成功后可双向发送数据。

服务端:
主要运行监听程序,用于时刻监听是否有客户端来连接服务端的IP地址和端口,若是有连接成功的,则可以进行数据的传输,此传输为双向传输。

客户端:
客户端程序用于连接服务端程序,服务端会暴露出服务的IP地址和端口,客户端通过IP地址和端口号,即可连接到服务端,连接成功后,二者可进行双向的数据传输。

Demo

服务器端

            int port = 2000;
            string host = "172.16.1.1";

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

            Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sSocket.Bind(ipe);
            sSocket.Listen(0);
            Console.WriteLine("监听已经打开,请等待");

            //receive message
            Socket serverSocket = sSocket.Accept();
            Console.WriteLine("连接已经建立");
            string recStr = "";
            byte[] recByte = new byte[4096];
            int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
            recStr += Encoding.ASCII.GetString(recByte, 0, bytes);

            //send message
            Console.WriteLine("服务器端获得信息:{0}", recStr);
            string sendStr = "send to client :hello";
            byte[] sendByte = Encoding.ASCII.GetBytes(sendStr);
            serverSocket.Send(sendByte, sendByte.Length, 0);
            serverSocket.Close();
            sSocket.Close();

客户端

            //服务器端ip地址和端口
            int port = 2000;
            string host = "172.16.1.1";       

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

            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            clientSocket.Connect(ipe);

            //send message
            string sendStr = "发送数据 : hello,我是阿辉";
            byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr);
            clientSocket.Send(sendBytes);

            //receive message
            string recStr = "";
            byte[] recBytes = new byte[4096];
            int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0);
            recStr += Encoding.ASCII.GetString(recBytes, 0, bytes);
            Console.WriteLine(recStr);

            clientSocket.Close();

这里只是简单的介绍在一般情况下服务端和客户端进行数据通信的方法,是一种同步通信下建立的连接,在日常工作中,我们很容易出现多次连接传输的情况,那么此时就需要使用异步的方式进行连接和接收数据。后面文章将介绍如何使用异步方式在客户端和服务器端进行数据传输。

寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。

原创不易,给个关注。

我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andy阿辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值