题目有点长,又一次感受到自己表达能力的欠缺,其实问题大概是这样的:由于工作需要用C# socket(第一次使用)写了一个client连接服务器,发送和接收数据包——当然要求能同时发送和接收数据包,接收到就进行处理。我首先想到了要异步处理,C# socket也提供了异步的相关操作,然后我设置断点(基本上socket操作的每个函数都设置了断点让其进入)单步执行(F10),发现都没有问题可以发送和接收数据,但是直接运行(F5)就是不能成功,后来发现问题的原因是connet操作(调用的BeginConnect)是异步的,就是不会阻塞主程序,这样会导致connect操作没有成功,就何来的后续操作(发送和接收数据包),可以发现设置断点然后按F5始终不会进入连接完毕的操作和发送和接收数据包的操作。所以解决方法就是只要保证socket连接操作顺利完成——直接使用Connect进行连接,或者是我找到的一个解决方法是使用 ManualResetEvent。
就不贴代码了,说的很没有逻辑,我想只有碰到过这样问题的人才能看懂吧,也没有时间倒腾了,如果你有问题可以留言。
这个问题我足足用了一天才解决的,请教了公司的很多同事,都素手无策,然后CSDN上有人说了这个问题但是跟我不太一样,也没有找到解决方法。然后我就一直在找人家贴出来的代码,终于被我发现51CTO(查看猛点)上有人用了ManualResetEvent,就有眼前一亮感觉,就赶紧研读了下,就这样把我的问题解决了。
然后再使用C#进行二进制数据包传输的时候要注意大小端和编码的问题。很可能你使用Java开发的时候是没有问题的,但是改用C# 就有问题了,因为C#是进行小端字节序存储的,而网络流的是用大端字节序进行发送的。还有一个问题是不同语言直接要把编码一致,比如我使用C# 的Unicode编码方式把英文字符串转出byte数组,然后Java在另一端解析字符之间会多出空格,这就是编码方式不一致的问题,C#使用的是UTF16,而Java端使用UTF8,所以会多出空格。
问题是很多的,但是总不会无中生有的,只要认真分析总能找到问题所在和解决方法。
转载请在文首注明出处:http://dsqiu.iteye.com/blog/1882308
相关推荐
C# 使用Socket发送和接收TCP数据,包含客户端和服务器端,发送Send,监听Listen ,C#运行环境VS2010
C#使用socket发送(接收)文件的程序,任何文件均可。 其中SingleSendForm是一次发送一个文件,MultiSendForm可以一次选择多个文件,然后依次发送。
c#socket连接服务器,服务器与客户端互相通信,服务端侦听客户端是否掉线
提供一个c# socket连接池设计的例子,解决socket并发连接限制的问题,并且提供一种设置连接超时时间的方法,默认连接超时时间是不能设置的,提供了socket网络发送数据的接口.可用于pos小票打印机通讯。
C#使用Socket发送和接收TCP数据,含客户端和服务器端程序,发送Send和监听Listen。测试可行。C#环境VS2010
c# Socket 多线程 分包 发送/接受数据 客户端 分包发送数据,服务端接受并相应, 第一次接触Socket也不知道理解的对不对 有问题的还请见谅
C# Socket服务端向指定的客户端发送消息(包含服务器)
主要介绍了C#使用Socket实现发送和接收图片的方法,涉及C#操作socket发送与接收文件的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
3、socket功能类库模块(其他项目也可以引用),socket类库模块功能齐全,只需调用其中方法即可,复用性较强,代码注释详细,实现了心跳,解决了粘包问题,异步发送接收数据,等等,bin目录下右运行日志方便查找程序...
Socket 发送 接收 数据 c#Socket 发送 接收 数据 c#
使用socket类实现c# UDP组播的发送和接收 ;可以指定专门网卡接收消息;
本教程实现:服务器和客户端单向通信,客户端给服务器发送数据,服务器收到数据打印输出到控制台窗口。 让不懂SuperSOCKET的初学人员可以快速(只花几分钟的功夫)搭建自己的简易服务器。先从大方向讲解要做哪些基础...
刚刚学习socket的时候编写的程序,可以实现客户端连续向服务器发送三个数据,服务器端连续接受三个数据并返回给客户端处理结果
C#Socket局域网发送与接收消息
C# socketUdp 异步 消息发送接收
C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 ...
C# Socket 发送接收文件,消息 互发消息,服务器下发文件
用C#接收和发送文件,支持大文件传输。这是我在国外网站下载的。
采用c#编写的基于SOCKET的通信程序,分为客户端和服务端两块,根据相应的IP地址和端口号,实现消息的发送和接收,为异步方式实现。
C#使用socket发送和接受数据,一看就懂~~~非常适合新手!