只要知道要通信的两台主机的IP地址和进程的端口号,然后可以用Socket让这两个进程进行通信。
在本机上运行服务端和客户端,ip为127.0.0.1,使用端口9050(0~1023的端口号通常用于一些比较知名的网络服务和应用,普通网络应用程序则应该使用1024以上的端口号,以避免该端口号被另一个应用或系统服务使用)。
服务端:
var ip = "127.0.0.1";
var port = 9050;
//第一步:建立一个用于通信的Socket对象
//参数1:指定该IP对应的协议,此为IPv4;参数2:定义要打开的Socket的类型;参数3:向Windows Sockets API通知所请求的协议
var serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//第二步:使用bind绑定IP地址和端口号,IPEndPoint内参数为IPAddress的long类型和端口号
var ipEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
serverSocket.Bind(ipEndPoint);
//第三步:使用listen监听客户端,参数为指定侦听队列的容量
serverSocket.Listen(10);
//第四步:使用accept中断程序直到连接上客户端,(接收连接并返回一个新的Socket,Accept会中断程序,直到有客户端连接)
Console.WriteLine("等待客户端连接...");
var socket = serverSocket.Accept();
var socketip = (IPEndPoint) socket.RemoteEndPoint;
Console.WriteLine($"连接成功! ip:{socketip.Address} 端口:{socketip.Port}");
//第五步:接收来自客户端的请求,用死循环来不断的从客户端获取信息
while (true)
{
var receiveBytes = new byte[1024];
var receive = socket.Receive(receiveBytes);
if (receive == 0 || Encoding.UTF8.GetString(receiveBytes, 0, receive) == "exit") //当信息长度为0或收到exit,说明客户端连接断开
{
break;
}
Console.WriteLine(Encoding.UTF8.GetString(receiveBytes, 0, receive)); //将指定字节数组中的一个字节序列解码为一个字符串
}
//第六步:返回客户端的数据
var send = new byte[1024];
send = Encoding.UTF8.GetBytes("服务端已关闭!");
socket.Send(send);
//第七步:如果接收到客户端已关闭连接信息就关闭服务器端,并返回信息
serverSocket.Close();
socket.Close();
Console.WriteLine("服务端关闭...");
客户端:
var ip = "127.0.0.1";
var port = 9050;
//第一步:建立一个用于通信的Socket对象
var ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//第二步:根据指定的IP和端口连接服务器
//IPAddress:包含了一个IP地址;IPEndPoint:包含了一对IP地址(IPAdress类型)和端口号
var ipEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
ClientSocket.Connect(ipEndPoint);
//第三步:连接成功后向服务器端发送数据请求
while (true)
{
var send = new byte[1024];
Console.WriteLine("请输入要发送的数据:");
var str = Console.ReadLine();
send = Encoding.UTF8.GetBytes(str);
ClientSocket.Send(send);
if (str == "exit")
{
Console.WriteLine("已退出...");
break;
}
Console.WriteLine("发送成功!" + "\n");
}
//第四步:接收服务器返回的请求数据
var receiveBytes = new byte[1024];
var receive = ClientSocket.Receive(receiveBytes);
Console.WriteLine(Encoding.UTF8.GetString(receiveBytes, 0, receive));
//第五步:如果不需要请求数据就关闭客户端并给服务器发送关闭连接信息
ClientSocket.Close();
通讯:
标签:Console,Socket,C#,编程,WriteLine,var,new,客户端 From: https://www.cnblogs.com/shieryoufeng/p/17799562.html