首页 / C# / C#并发和异步套接字连接
C#并发和异步套接字连接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#并发和异步套接字连接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2403字,纯文字阅读大概需要4分钟。
内容图文
我正在研究一个简单的套接字服务器,该服务器应该接受多个连接并通过EndAccept()将它们移交给“连接”类.问题是在接受连接后,代码不接受任何进一步的操作直到连接结束.
我在Main()中创建套接字,然后通过Initialize()将套接字传递给ServerEnvironment(静态类).
MainSocket.Bind(new IPEndPoint(IPAddress.Parse(Addr), Port));
MainSocket.Listen(10);
ServerEnvironment.Initialize(MainSocket);
while (true)
{
Console.ReadLine();
Console.WriteLine(">>");
}
一旦MainSocket通过,ServerEnvironment就会从那里接管.
static Socket MainSocket;
public static void Initialize(Socket _MainSocket)
{
MainSocket = _MainSocket;
AcceptGameConnection = new AsyncCallback(AddConnection);
MainSocket.BeginAccept(AcceptGameConnection, null);
}
public static void AddConnection(IAsyncResult Result)
{
Socket UserSocket = MainSocket.EndAccept(Result);
ConnectionCount++;
// Removed the stuff that happens to UserSocket because the same
// symptoms occur regardless of their presence.
MainSocket.BeginAccept(AcceptGameConnection, null);
}
当我搜索这个问题时,我发现多线程可能是我的目的所必需的.但是,当我使用Console.WriteLine(Thread.CurrentThread.ManagedThreadId)时;在Initialize()中;和AddConnection();,出现两个不同的线程ID,所以我假设多线程已经是一个功能,我不需要手动创建一个线程.但这并不能解释我的问题.
多线程是否需要我能够拥有并发和异步套接字连接?
编辑:
绑定错误..绑定到我的LAN地址,这导致一些问题.
解决方法:
如果您使用.net 4.0或更低版本,这就是您希望如何执行此操作
public static void Initialize(Socket _MainSocket)
{
MainSocket = _MainSocket;
AcceptGameConnection = new AsyncCallback(AddConnection);
MainSocket.BeginAccept(result => {
var userSocket = MainSocket.EndAccept(result);
var thread = new Thread(AddConnection);
thread.Start(userSocket);
Initialize(MainSocket);
}, null);
}
public static void AddConnection(IAsyncResult Result)
{
MainSocket.BeginAccept(AcceptGameConnection, null);
}
private static void AddConnection(Socket userSocket)
{
// Removed the stuff that happens to UserSocket because the same
// symptoms occur regardless of their presence.
}
但这就是你在.net 4.5或更高版本中的表现.
public static void Initialize(Socket mainSocket)
{
while(true)
{
var userSocket = await Task.Factory.FromAsync(
mainSocket.BeginAccept,
mainSocket.EndAccept);
ThreadPool.QueueUserWorkItem(_ => AddConnection(userSocket));
}
}
private static void AddConnection(Socket userSocket)
{
// Removed the stuff that happens to UserSocket because the same
// symptoms occur regardless of their presence.
}
内容总结
以上是互联网集市为您收集整理的C#并发和异步套接字连接全部内容,希望文章能够帮你解决C#并发和异步套接字连接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。