套接字Asyn连接

时间:2009-11-02 17:19:41

标签: sockets asynchronous

我是Async Socket Connection的新手。你能解释一下吗?这项技术如何运作。 现有的应用程序(服务器)需要套接字连接来传输数据。我已经创建了我的应用程序(.NET),但是服务器应用程序似乎不理解我发送的XML数据。我的文档给了我两个端口,一个发送,另一个接收。 我需要确定我理解这是如何工作的。 我得到了IP地址以及要使用的两个端口。

2 个答案:

答案 0 :(得分:1)

套接字是您用于通过网络发送字节级TCP和UDP数据包的最“原始”方式。

例如,您的浏览器使用套接字TCP连接来连接到端口80上的StackOverflow Web服务器。您的浏览器和服务器根据商定的结构/协议(在本例中为HTTP)交换命令和数据。异步套接字与同步套接字没什么区别,除了它不会阻塞正在使用它的线程。

这实际上不是最理想的工作方式(检查并查看您的服务器/供应商应用程序是否支持SOAP / Web服务等),但如果这是唯一的方法,可能有很多原因导致它的原因。失败。仅举几例......

  1. 实际上没有连接或发送数据。使用WinsockTool(http://www.isatools.org/tools/winsocktool.msi)运行测试并首先模拟客户端以确保服务器按预期工作。
  2. 编码错误 - 您正在通过网络发送原始字节...确保使用正确的编码将XML转换为字节(ASCII,UTF8等)。
  3. 缓冲区长度 - 您的发送缓冲区(您可以一次性传输的数据量)可能太小,或者服务器可能需要一定长度的内容,并且您的XML可能会被截断。

答案 1 :(得分:1)

让我们打破一个误解......套接字是FULL-DUPLEX:你使用一个端口连接到服务器,然后你可以通过同一个套接字发送和接收数据,不需要2个端口号。 (实际上,有一个端口分配用于接收数据,但它是:1。在创建套接字时自动分配(除非被告知)和2.在函数调用中没有用来接收数据)

所以你告诉我们你的文档给你2个端口号...我假设“服务器”是一个已经存在的内部应用程序,你正试图与之交谈。如果文档列出了2个端口,那么你将需要2个套接字:一个用于发送,另一个用于接收。现在我建议您在尝试异步方式之前先使用同步套接字:第一次测试时,同步套接字不易出错。

(顺便说一句,让我们打破另一个误解:如果编码良好,一旦服务器侦听端口,它就可以通过相同的端口号接收任意数量的连接,无需打开2个侦听端口即可接受2个连接。 ..对不起重新调整,但我已经看到那些2个错误犯了足够的时间,它给了我一个杀人的冲动)