gpt4 book ai didi

c# - 在发送数据之前检查套接字是否已连接

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:33 24 4
gpt4 key购买 nike

我正在使用 super 简单的同步 C# 套接字进行分配。任务是创建一个点对点聊天程序,因此每个实例都必须同时充当客户端和服务器。当我将程序置于监听模式时,我的程序运行良好:(StateBall 是一个传递状态变量的对象)

public void startListening()
{
lState = new StateBall();
IPEndPoint peer = new IPEndPoint(StateBall.host, StateBall.port);
lSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);

try
{
lSocket.Bind(peer);
lSocket.Listen(10);
Console.WriteLine("Waiting for a connection...");

StateBall.updateText("Waiting for a Connection...");

client = lSocket.Accept();
StateBall.toSend=StateBall.ourName;

StateBall.updateText("Connection made! Sending our name...");
...

但是当我尝试启动第二个实例并连接到一个已经运行的实例时,它只是挂起并且没有连接。

根据我在这个网站和其他网站上看到的内容,我可以使用类似以下内容检查预先存在的连接:

try{
lsocket.Connect(peer);
}
catch(Exception ex){
//check for SocketException type and errors
}

然后继续我的程序,但是有没有一种干净的方法可以将初始检查集成到现有代码中?或者有没有更好的方法在尝试调用我的套接字对象上的 Connect 之前检查事件主机?

最佳答案

您可以而且可能应该处理多个并发连接。只需在循环中调用 accept 并在单独的线程上分派(dispatch)客户端。我假设您只使用一个线程,因此当服务器忙于一个客户端连接时,客户端尝试超时。

关于c# - 在发送数据之前检查套接字是否已连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1604450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com