在用完成端口走udp的时候,当接收数据包的时候不能象平时单线程的时候recvfrom可以得到对方的ip和port,那么比如作个udp的服务器的话,我接收到客户端的发送来得数据,我怎么回复给他们数据那,因为不知道他们的ip和端口丫,难道都是让他们先“注册”一下自己的端口和ip?要是让他们先“注册”的话岂不是又要开另外的一个线程负责处理这些注册信息。要是在接受数据结构里作‘注册’字段的话,要是客户端经过一次端口映射的话岂不是得不到他的正确ip和port?
解决方案 »
- 请问各位高手,pe文件中的imagebase倒是指的是什么,addressofentrypoint又是什么,他们有什么区别
- 再问一下三表查询的问题
- 有关winpcap编程的问题
- vc用ado连接sybase,操作存储过程,出现这个错误 idispath error #3092,请问这是怎么回事,哪为能给我vc用ado连接sybase,操作存储过程
- OnChar函数的中文处理问题,退格键时,怎么处理
- 为什么刷新自画按钮需Invalidate和UpdateWindow
- 这是怎么回事,能解决么?我在等......................到天黑.
- yhb4!!
- windows media player控件
- windows下C语言如何直接读写串口?
- 关于编译时连接动态库的问题
- 菜鸟问特低级问题:CRichEditCtrl 和 CRichEditView 到底是什么关系啊?
struct _DATA
{
char ip[32];
char user[32]
char password[32];
char data[2048];
}DATA;
实践表明,一般情况下,4096大小以内的数据都是可以一次完全传送过来的。
发送的时候:
send(sockRecv,(char*)&DATA,sizeof(DATA),0);
接收同理。
{
char ip[32];
char user[32]
char password[32];
char data[2048];
}DATA;
有点道理!
服务器端:
typedef struct tagSOCKET_DATA
{
SOCKET hSocket;
SOCKADDR_IN addr;
CHAR szBuffer[RECV_BUFFER_SIZE]; WSABUF WsaBuf;
DWORD dwBufLen;
DWORD dwFlags;
}PER_SOCKET_DATA, *PPER_SOCKET_DATA;完成端口等待函数:
PPER_SOCKET_DATA pContext = NULL;
if (!GetQueuedCompletionStatus(参数1, 参数2, (LPDWORD)&pContext, 参数4, 参数5)
{
.......
}
如果有数据:
&pContext->addr就能得到对方每一次的地址和端口号
//----------------------------------------------------------------------------
那么udp的时候你没有办法知道一开始他的ip和port也就没有办法添你所想关心的context。因为这个context不是系统给你添进去的,是你自己。
WSARecvFrom(1, 2, 3, 4, (SOCKADDR*)&pContext->addr, 6, 7, 8, 9)