利用TCP协议实现服务端与客户端的通信01_服务端与客户端的(同步收发)

1、服务端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
namespace TCPServer
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  //第一个参数表示时候用ipv4,第二个Stream表示TCP传输用到的数据流,如果是UDP协议可以用Dgram报文
            //IPAddress xxx.xx.xx.xx IPEndPoint xxx.xx.xx.x:port 需要用到using System.Net;
            IPAddress ipAddr = IPAddress.Parse("127.0.0.1");    //服务器端申请ip及端口号
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 1200);
            socketServer.Bind(ipEndPoint);  //进行绑定
            socketServer.Listen(10);    //最多处理10个连接的队列
            Socket socketClient = socketServer.Accept();  // 接收客户端连接,之后通过socketClient进行对客户端数据的收发

            //发送给客户端
            string sendMsg = "hello,客户端";
            byte[] sendData = Encoding.UTF8.GetBytes(sendMsg);  //字符串转为bype数组发送,用到using System.Text;
            socketClient.Send(sendData);

            //从客户端接收
            byte[] recvData = new byte[1024];   //分配1024字节大小的空间存储
            int count = socketClient.Receive(recvData); //接收到的字节大小
            string recvMsg = Encoding.UTF8.GetString(recvData, 0, count);  //数组转为字符串,转换0~count长度,由于recvData未填满,直接转换recvData会出错
            Console.WriteLine(recvMsg);
            socketClient.Close();
            socketServer.Close();
        }
    }
}

2、客户端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
namespace TCPClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1200));

            //从服务端接收数据
            byte[] dataRecv = new byte[1024];
            int count = clientSocket.Receive(dataRecv);
            string msgRecv = Encoding.UTF8.GetString(dataRecv, 0, count);
            Console.WriteLine(msgRecv);

            //向服务端发送数据
            string msgSend = Console.ReadLine();
            byte[] dataSend = Encoding.UTF8.GetBytes(msgSend);  //字符串转为bype数组发送,用到using System.Text;
            clientSocket.Send(dataSend);
            Console.ReadKey();
            clientSocket.Close();
        }
    }
}

3、效果:
利用TCP协议实现服务端与客户端的通信01_服务端与客户端的(同步收发)_第1张图片4、上述方法是一个同步发送与接收的例子,当服务器处于接收状态时,无法发送数据给客户端,反之亦然。因此需要一种异步的处理方法

你可能感兴趣的:(Socket服务器)