服务器遵照Socket通信的基本流程,先创建Socket,再调用Bind绑定IP地址和端口号,之后调用Listen 等待客户端连接。最后在while循环中调用Accept接收客户端的连接,并回应消息。
using System;
using System.Net;
using System.Net.Sockets; //Socket类为网络通信提供了一套丰富的方法和属性
namespace test1
{
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine ("Hello World!");
//Socket
Socket listenfd = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建一个套接字,三个参数分别代表地址族,套接字类型(stream字节流)和协议
IPAddress ipAdr = IPAddress.Parse("127.0.0.1");
//Bind
IPEndPoint ipEp = new IPEndPoint (ipAdr,1234);
listenfd.Bind (ipEp); //给套接字listenfd绑定ip和端口
//Listern
listenfd.Listen(0); //开启监听,参数backlog指定队列中最多可容纳等待接受的连接数,0表示不限制
Console.WriteLine ("[服务器]启动成功");
while(true)
{
//accept
Socket connfd = listenfd.Accept(); //服务端接收客户端连接
Console.WriteLine("[服务器]Accept");
//Recv
byte[] readBuff = new byte[1024]; //存储接收到的数据
int count = connfd.Receive(readBuff); //服务器接收客户端数据,返回值则指明接收到的数据的长度
string str = System.Text.Encoding.UTF8.GetString(readBuff,0,count); //将byte[]数组转换成字符串显示在屏幕上
Console.WriteLine("[服务器接收]" + str);
//send
byte[] bytes = System.Text.Encoding.Default.GetBytes("serv echo " + str); //服务器把字符串转换成byte[]数组
connfd.Send(bytes); //服务器发送数据给客户端
}
}
}
}