佚名通过本文主要向大家介绍了Unity3D建立不了tcp服务器总是被提示“一个封锁操作被。。。。终止”等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: Unity 3D 建立不了tcp服务器 总是被提示“一个封锁操作被。。。。终止”
描述:
{
// 创建负责监听的套接字,注意其中的参数;
socketWatch = new Socket(IPAddress.Parse(serveripaddress).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
// 获得文本框中的IP对象;
IPAddress address = IPAddress.Parse(serveripaddress);
// 创建包含ip和端口号的网络节点对象;
IPEndPoint endPoint = new IPEndPoint(address, port);
try
{
// 将负责监听的套接字绑定到唯一的ip和端口上;
socketWatch.Bind(endPoint);
}
catch (SocketException se)
{
erroInfo = "异常:" + se.Message;
return false;
}
// 设置监听队列的长度;
socketWatch.Listen(10);
// 创建负责监听的线程;
threadWatch = new Thread(WatchConnecting);
threadWatch.IsBackground = true;
threadWatch.Start();
//TBX.Text += "服务器启动监听成功!\r\n";
_is_start = true;
return true;
}
本人想在unity 中 写入tcp服务器 想吧 服务器和客户端结合在一起 做类似局域网的那种 然而碰到这样的一个问题,
socketWatch = new Socket(IPAddress.Parse(serveripaddress).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
调试到这里的时候 出现绑定失败的情况
“EnableBroadcast System.Net.Sockets.SocketException: 在 getsockopt 或 setsockopt 调用中指定的一个未知的、无效的或不受支持的选项或层次。”
然后在下面 还有出现一个情况 “一个封锁操作被对 WSACancelBlockingCall 的调用中断。” 貌似这里我曾经看到是 说unity 的线程不允许阻塞 求大神解决
解决方案1:
描述:
unitytcp游戏开发unity 服务器封锁操作被对
public bool startlisener(){
// 创建负责监听的套接字,注意其中的参数;
socketWatch = new Socket(IPAddress.Parse(serveripaddress).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
// 获得文本框中的IP对象;
IPAddress address = IPAddress.Parse(serveripaddress);
// 创建包含ip和端口号的网络节点对象;
IPEndPoint endPoint = new IPEndPoint(address, port);
try
{
// 将负责监听的套接字绑定到唯一的ip和端口上;
socketWatch.Bind(endPoint);
}
catch (SocketException se)
{
erroInfo = "异常:" + se.Message;
return false;
}
// 设置监听队列的长度;
socketWatch.Listen(10);
// 创建负责监听的线程;
threadWatch = new Thread(WatchConnecting);
threadWatch.IsBackground = true;
threadWatch.Start();
//TBX.Text += "服务器启动监听成功!\r\n";
_is_start = true;
return true;
}
本人想在unity 中 写入tcp服务器 想吧 服务器和客户端结合在一起 做类似局域网的那种 然而碰到这样的一个问题,
socketWatch = new Socket(IPAddress.Parse(serveripaddress).AddressFamily, SocketType.Stream, ProtocolType.Tcp);
调试到这里的时候 出现绑定失败的情况
“EnableBroadcast System.Net.Sockets.SocketException: 在 getsockopt 或 setsockopt 调用中指定的一个未知的、无效的或不受支持的选项或层次。”
然后在下面 还有出现一个情况 “一个封锁操作被对 WSACancelBlockingCall 的调用中断。” 貌似这里我曾经看到是 说unity 的线程不允许阻塞 求大神解决
解决方案1:
提示很明显了吧
用了一些线程阻塞的方法
WatchConnecting 不知道你有没开线程,一般要开的,估计你想开线程,但是代码c#写法有些不对,实际上还是在主线程执行socket,(所以有这个提示),也可以用异步,很多方法实现的,
不确定你new Socket 是用了哪个库的,估计是这句爆错,断点一下就可以判断是不是了
要开socket,等待链接,所以阻塞也是正常的
换成不阻塞的方法即可
哥自问c#和java都写过socket,10年前,c++服务器也写过
也不敢“自己写”,都是拿人家库改,你这样”重写“,很多坑要填平
基本上就是c#的语法,你把c# 线程,runtime,framework这些搞懂,就没问题了