主机对象是我们所必须的
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();
}
}
}
在上面的代码中有个有疑惑的地方
在关闭链接和发送数据的过程中 好像关闭链接和 发送数据不是在同一个线程中进行的