我要做的就是调用Socket.BeginConnect来连接远程服务器。 |
|
重新 new 一个 Server,这需要换一个本地端口。
|
|
恩我之前是这样做的。每次定时器触发时,即将发送数据前会new一个socket,但是这样会有另外一个问题,就是当我调用receive方法接收服务器端的回送信息时回报这个错,一个封锁操作被对 WSACancelBlockingCall 的调用中断。我也并不清楚服务器端是怎么写的,您能不能帮忙分析下有可能是什么原因?
|
|
你不是说connect时候有错吗?
如果是receive有错,那么你应该检查你的服务器有没有“不小心”关闭了此通道。有时候,服务器端是短连接,而你把它当作长连接去第二次开始Receive,可能也会如此吧。如果第一次Receive就报错,你应该检查一下是不是服务程序在绑定端口时就有问题了。 |
|
恩我的意思是按照您说的每次重新new Socket的方法。Connect就没问题了,但再第二次Receive开始时就会报错。先谢谢您了,明天再来找问题,因为是在帮老师做个小程序,服务器端是另一家公司写的,并不清楚内部怎么实现的,还要仔细问清楚 |
|
30分 |
基本上,如果使用 tcp,那么应该保持长连接。 如果你使用短链接,那么使用简单的 http 甚至 udp 都可以。而且 udp 编程代码至少比 tcp 少一半,非常简单。而http 则是不但简单(只需要写一句 new WebClient().UploadData(url,data) 语句)也相当稳定(只不过http会比udp慢一些而已)。 我们使用 tcp 的目的就是为了长连接,(尤其在互联网上)服务器推送消息。tcp 编程是最复杂的,一开始遇到的bug最多。 |
如果你每次发送数据时都要“new”,最好不要使用 tcp。
|
|
由于服务器端是别人开发的,也不告我们怎么实现。不太清楚逻辑,问题还是没有解决,不过感谢您的回答,对我这个新手很有启发!~ |