我是在delphi下用WinSock建立套接字进行通信。我的程序是用来接收别人发过来的数据,并有返回数据。在进行通信时我创建一个线程来完成接收和发送的。现在我需要把我的程序改成可以向另外一台机器建立连接而向其发送数据,我又创建一个发送的套接字线程,可是我需要发送的数据在另一个线程里。现在我遇到的问题是:1.我怎么从另一个线程中把要发送的数据取出来?2.我怎么保持同步,即在我另一个线程收到数据的同时把这些数据在另一个线程中发出去?不胜感激!!!!
解决方案 »
- 最近在看一个源代码的时候 在其中一个类中对方使用了count
- [菜鸟求助!!!]毕业设计需要开发snmp的网管系统,有人推荐Delphi+SQL server,高手给介绍一下吧。感激不尽!!
- 菜鸟问个问题,idUDPServer发送字符串
- 菜鳥求救! 這幾個語句是什麼意思,下午測試 解釋詳細給分多!!!!
- 帮忙看看我的sql语句是否合理?
- 怎么样显示树形结构?
- 我用DBImage组件时,出现“Bitmap image is not valid”
- 什么是B/S、C/S结构?请各位老大多指教~!
- 请问你是高手吗?如果是请过来说两句!因为这才是挑战你们极限的问题!!!不信来试试!
- 刚学Dephil,看什么书好些,那里有DEPHIL连接数据方面的例子啊?刚学DephiL有那写需要注意的问题么?
- Md5 产生的32 位字符串 如何赋值给 array[0..15] of byte 数组 ?
- 数据查询问题
一般的做法是使用:在转发的线程里面,用AllocateHWnd让系统分配个窗口句柄,把这个HWND的值告诉另外的那个服务线程.
当服务线程收到数据的时候,就给这个HWND的窗口发个消息,告诉转发线程,数据来了.
至于数据怎么传递,如果有具体的协议,可以定义个结构,消息里面的WPARAM或LPARAM传递结构的指针.
第二个问题:
udp需要连接吗?直接sendto就行啦
收到之后就sendto不就可以了,缓冲区你要设定好大小,一旦达到最大值,你就直接清空缓冲区(再说sendto的速度并不比接收的速度差)。
你说收不到数据,我估计你是用的UDP协议(因为一般用TCP的话是先连接了才才发数据);
如果接收端在NAT之后需要做个映射,如果做了映射还没收到;那就试试关闭防火墙了。