您好我正在编写一个正在侦听连接的简单服务器程序。我的问题是,如何测试套接字是否已连接。这是我的代码
using System;
using System.Net;
using System.Net.Sockets;
class server
{
static int port = 0;
static String hostName = Dns.GetHostName();
static IPAddress ipAddress;
static bool listening = true;
public static void Main(String[] args)
{
IPHostEntry ipEntry = Dns.GetHostByName(hostName);
//Get a list of possible ip addresses
IPAddress[] addr = ipEntry.AddressList;
//The first one in the array is the ip address of the hostname
ipAddress = addr[0];
TcpListener server = new TcpListener(ipAddress,port);
Console.Write("Listening for Connections on " + hostName + "...");
do
{
//start listening for connections
server.Start();
} while (listening);
//Accept the connection from the client, you are now connected
Socket connection = server.AcceptSocket();
Console.Write("You are now connected to the server");
connection.Close();
}
}
答案 0 :(得分:2)
我觉得你的豆子搞砸了。在下面,在操作系统级别,有两个不同的概念:监听套接字 - 即TcpListener
和连接套接字 - 这就是你成功后获得的accept()
。
现在,侦听TCP套接字未连接,但绑定到本地计算机上的端口(可能还有地址)。这就是服务器等待来自客户端的连接请求的地方。一旦这样的请求到达,操作系统就会创建一个新的套接字,它连接的意思是它具有通信所需的全部四个部分 - 本地IP地址和端口,以及填写的远程地址和端口。
答案 1 :(得分:0)
server.Start()
应该在循环之外。它只被调用一次,监听套接字将一直打开,直到调用Stop
。
AcceptSocket
将阻止,直到客户端已连接。如果你想能够接受多个套接字,那么继续循环它。