`

C# socket连接服务器发送和接收数据在设置断点单步执行没有问题但是直接运行不能成功

阅读更多

       题目有点长,又一次感受到自己表达能力的欠缺,其实问题大概是这样的:由于工作需要用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

0
4
分享到:
评论

相关推荐

    C#socket编程实例

    在Visual Studio 2005环境下,开发者可以利用IDE提供的调试工具,如断点、单步执行、查看变量值等功能,对Socket通信过程进行详细分析和测试。同时,通过添加适当的异常处理,可以确保程序在遇到网络问题时能够优雅...

    NetSocket.zip

    在VS2008中,开发者可以创建控制台应用程序项目,添加Socket相关的代码,利用其内置的调试工具进行断点设置、单步执行、查看变量值等调试操作,以理解和优化代码。 6. **文件列表"NetSocket"**: 这个文件名可能是...

    UDP聊天源码 C#

    9. **调试与测试**:在VS2005中,可以使用内置的调试工具检查代码运行状态,通过断点、单步执行和变量监视等功能找出潜在的错误。 10. **网络通信协议**:理解UDP协议的基本原理,包括其无连接性、不可靠性以及如何...

    视频传输 windowserver

    开发者可以通过IDE中的调试器进行断点设置、单步执行、查看变量值等操作,以便于定位和解决问题。 此外,视频传输可能会涉及到编码和解码技术。通常,视频会被编码成特定格式(如H.264或VP9),以降低带宽需求并...

    c#仿QQ聊天工具源码

    在Visual Studio中,开发者可以利用断点、单步执行、查看变量值等功能进行调试,确保代码运行正确无误。 总结来说,这个“仿QQ聊天工具源码”项目涵盖了C#语言的核心特性,包括面向对象编程、.NET框架的使用、...

    C#超级通信调试工具源码

    C#中的Socket类提供了发送和接收数据的方法,如`Send()`和`Receive()`,以及连接到服务器的`Connect()`方法。 2. **多线程**:为了同时处理多个连接,通信工具往往使用多线程或多任务处理。C#中的Thread类或Task类...

    C#系统开发实例概述

    C#的Visual Studio IDE提供了强大的调试工具,如断点、单步执行、变量查看等,帮助开发者定位和修复问题。 10. **版本控制**:为了团队协作和版本管理,开发者通常会使用Git等版本控制系统。C#与Git的集成使得代码...

    C#开发典型模块大全

    1.6.3 单步执行 25 1.6.4 运行到程序的指定位置 25 第2章 QQ企业通 2.1 设计思路 28 2.2 关键技术 28 2.2.1 INI文件的应用 28 2.2.2 线程的应用 30 2.2.3 在Socket中发送大容量的消息 30 2.2.4 将...

    C#项目实战 MyQQ答案

    6. **网络编程**:通过Socket或WebSocket实现客户端与服务器之间的通信,发送和接收消息,实现即时通讯的核心功能。 7. **序列化与反序列化**:为了在网络中传输对象,开发者需要了解如何将对象转换为字节流(序列...

    C#通信调试工具1.0(带源码).zip

    4. **调试工具**:该工具的核心功能之一是调试,这涉及到断点设置、单步执行、查看变量值、调用堆栈分析等功能。C#的调试通常在Visual Studio IDE中进行,通过集成的调试器进行代码的逐行检查和错误定位。 5. **...

    仿QQ聊天程序 c#源码

    10. **调试技巧**:了解如何使用Visual Studio的调试工具,如断点、单步执行、查看变量值等,对于解决程序中的问题非常有帮助。 通过分析和学习这个“仿QQ聊天程序 c#源码”,初学者不仅可以提升C#编程技能,还能...

    仿QQ2008聊天程序(c#源代码)

    11. **调试技巧**:使用Visual Studio的调试工具进行断点设置、单步执行、变量观察等,有助于查找和修复程序中的问题。 12. **性能优化**:对于大规模用户量的即时通讯应用,性能优化是必不可少的,包括内存管理、...

    C#开发典型模块大全(光盘)

    1.6.3 单步执行 1.6.4 运行到程序的指定位置 第2章 QQ企业通 2.1 设计思路 2.2 关键技术 2.2.1 INI文件的应用 2.2.2 线程的应用 2.2.3 在Socket中发送大容量的消息 2.2.4 将流序列化或反序列化为对象 2.2.5 用...

    .net 聊天室程序

    我们可以利用Visual Studio自带的调试工具,设置断点,查看变量值,以及单步执行代码,以确保程序按照预期工作。此外,单元测试也是一个好习惯,它能帮助我们隔离和验证代码的各个部分。 总的来说,开发一个.NET...

    Visual C# 2005程序设计自学手册 随书源码第一部分(共三部)

    18.3 什么是单步执行 391 18.4 如何运行到指定位置 391 18.5 本章小结 391 第19章 Windows应用程序打包与安装 392 19.1 Windows Installer简介 393 19.2 Windows应用程序部署 393 19.2.1 创建部署项目...

Global site tag (gtag.js) - Google Analytics