Sockets 使用套接字编程在服务器上读取端口
我的套接字编程代码有问题。 当我在下面使用时:Sockets 使用套接字编程在服务器上读取端口,sockets,c#-4.0,Sockets,C# 4.0,我的套接字编程代码有问题。 当我在下面使用时: var ipaddress = IPAddress.Parse("192.168.1.100"); IPAddress add = new IPAddress(ipaddress.GetAddressBytes()); TcpListener tcpListener = null; tcpListener = new TcpListener(add, 53); tcpL
var ipaddress = IPAddress.Parse("192.168.1.100");
IPAddress add = new IPAddress(ipaddress.GetAddressBytes());
TcpListener tcpListener = null;
tcpListener = new TcpListener(add, 53);
tcpListener.Start();
Console.WriteLine("Waiting for a connection...");
while (true)
{
Thread.Sleep(10);
TcpClient tcpClient = tcpListener.AcceptTcpClient();
//Read the data stream from the client.
byte[] bytes = new byte[512];
NetworkStream stream = tcpClient.GetStream();
stream.Read(bytes, 0, bytes.Length);
SocketHelper helper = new SocketHelper();
helper.processMsg(tcpClient, stream, bytes);
}
我收到这个错误:
附加信息:每个套接字地址(协议/网络地址/端口)通常只允许使用一次
但我把我的cod改为:
static Socket sktListener;
var ipaddress = IPAddress.Parse("192.168.1.100");
IPAddress add = new IPAddress(ipaddress.GetAddressBytes());
sktListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(add, 53);
sktListener.Connect(ipLocal);
if (sktListener.Connected)
{
byte[] bytes = new byte[512];
int i = sktListener.Receive(bytes);
Console.WriteLine(Encoding.UTF8.GetString(bytes));
}
但它没有任何作用。在这条线上停下来
int i = sktListener.Receive(bytes);
IPAddress.Parse()
返回一个新的IPAddress
对象,您不需要从第一个对象的字节创建第二个IPAddress
对象:
IPAddress add = IPAddress.Parse("192.168.1.100");
关于第一个代码中的使用错误,这意味着192.168.1.100:53已被另一个套接字使用
第二个代码不是创建服务器,而是创建连接到服务器的客户机。假设这些代码要一起工作,那么就可以理解为什么Receive()
会被阻塞-您的客户机希望接收服务器未发送的数据。您的服务器代码期望新客户端发送数据,但您的客户端没有发送任何数据