最简单的服务端

主机对象是我们所必须的

IPEndPoint

套接字

socket

套接字绑定主机对象

使用套件字开始监听

socket.listen

获取监听获得的套接字

Socket  b=socket.Accept();

IPAddress myIP = IPAddress.Parse("127.0.0.1");
IPEndPoint myServer = new IPEndPoint(myIP, 2012);
Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
mySocket.Bind(myServer);
mySocket.Listen(20);
Socket youSocket = mySocket.Accept();


上面一共出现了连个套接字

一个是监听套接字 一个就是我们通讯用的通讯套接字

下面传输下什么

            byte[] bytee = new byte[64];
string send = "wangxiao";
bytee = System.Text.Encoding.UTF8.GetBytes(send);
youSocket.Send(bytee);

NetworkStream ns = new NetworkStream(youSocket);
ns.Write(bytee, 0, bytee.Length);

上面有两种方法

1.使用通讯套接字的send 方法直接输出 

2.将套接字包装进一个 基本网络流 然后用网络流的 write 方法输出

同样的 获取客户端传来的 信息也用两种方法

            byte[] bytereceive = new byte[512];
youSocket.Receive(bytereceive, bytereceive.Length, 0);
string strreceive = System.Text.Encoding.UTF8.GetString(bytereceive);

ns.Read(bytereceive, 0, bytereceive.Length);

目前为止 是不是有一点了解 看是确多了很多疑问  ?

我就是这么个感觉;

IPEndPoint 中的ip地址是不是有规定呢

要是运行的话 服务端的话 ip地址难得不是特定的么? 或许是因为一台电脑可能有多个iP吧



  下面给出一个控制太的简单服务端

class Program
{
static Socket youSocket;
static void Main(string[] args)
{
IPAddress myIP = IPAddress.Parse("127.0.0.1");
IPEndPoint myServer = new IPEndPoint(myIP, 2012);
Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
mySocket.Bind(myServer);
mySocket.Listen(20);
while (true)
{
youSocket = mySocket.Accept();
Thread thread = new Thread(() =>
{
if (youSocket.Connected)
Console.WriteLine("链接开始");
byte[] send = new byte[64];
NetworkStream ns = new NetworkStream(youSocket);
string str = "test";
send = System.Text.Encoding.UTF8.GetBytes(str);
youSocket.Send(send);
//Thread.Sleep(1000);
//ns.Write(send, 0, send.Length);
//ns.Flush();
//ns.Close();
//youSocket.Close();
//byte[] byterec = new byte[1024];
//int r= ns.Read(byterec, 0, byterec.Length);
//Console.WriteLine(System.Text.Encoding.UTF8.GetString(byterec));
youSocket.Close(1);
});
thread.Start();
}
}
}


在上面的代码中有个有疑惑的地方

 在关闭链接和发送数据的过程中 好像关闭链接和 发送数据不是在同一个线程中进行的

原文地址:https://www.cnblogs.com/wxzl/p/2323326.html