一个SOCKET编码人的痛苦

page10 2005-03-31 03:02:03
1.WHAT IS 带外数据?

2.下面的代码,结果nRet是SOCKET_ERROR,nRCode=10038,怎么回事?
nRet = recv(lpReq->Socket, (char *)pBuf, dwBufSize,0);

if(nRet ==0)
perror("recv reading stream message(nRet=0)\n");
else if (nRet == SOCKET_ERROR)
{
DWORD nRCode = GetLastError();
printf("GetLastError=%d", nRCode);
perror("recv reading stream message(nRet=SOCKET_ERROR)\n");
}
else
printf("recv OK\n");

if (nRet == 0)
printf("ending connection \n");
else
printf("-->%s\n", pBuf);
...全文
285 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
panwai 2005-04-08
  • 打赏
  • 举报
回复
Socket 是谁????
yuanyou 2005-04-08
  • 打赏
  • 举报
回复
mark
anhy 2005-04-08
  • 打赏
  • 举报
回复
带外数据(out—of—band data),有时也称为加速数据(expedited data),

是指连接双方中的一方发生重要事情,想要迅速地通知对方。

这种通知在已经排队等待发送的任何“普通”(有时称为“带内”)数据之前发送。

带外数据设计为比普通数据有更高的优先级。

带外数据是映射到现有的连接中的,而不是在客户机和服务器间再用一个连接。
anhy 2005-04-08
  • 打赏
  • 举报
回复
我的理解是:
带外数据是一些紧急数据,它需要更快速的发到对方去。
ccaesarn 2005-04-01
  • 打赏
  • 举报
回复
你把你代码中对lpReq->Socket初始化的地方贴出来!
  • 打赏
  • 举报
回复
本人做了一个SOCKET客户端您看可以用吗:
#include "stdio.h"
#include "socket.h"
#include "global.h"


int socket_connect(const char* szHost, const unsigned int nPort, const unsigned int nTimeOut)
{
m_nSocket = socket(AF_INET, SOCK_STREAM, 0);
if (0 > m_nSocket)
{
printf("construct socket failed...\r\n");
return m_nSocket;
}

int nInit;
if (0 != (nInit = setsockopt(m_nSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&nTimeOut, sizeof(nTimeOut))))
{
printf("setsoockopt error\r\n");
return nInit;
}

m_sin.sin_addr.s_addr = inet_addr(szHost);
m_sin.sin_family = AF_INET;
m_sin.sin_port = htons(nPort);

printf("start to connect host...\r\n");
return connect(m_nSocket, (struct sockaddr*)(&m_sin), sizeof((m_sin)));
}

void socket_disconnect()
{
close(m_nSocket);
}


int socket_send(const char* szBuffer)
{
int nLen = strlen(szBuffer);
return send(m_nSocket, szBuffer, nLen, 0);
}

int socket_recv(char* szBuffer, int nRecvLen)
{
return recv(m_nSocket, szBuffer, nRecvLen, 0);
}


#ifdef _DEBUG_SOCKET_APP_

int main(int argc, char* argv)
{
int n = socket_connect("211.152.15.117", 8213, 60);
//socket_connect("192.168.4.189", 6000, 60);
printf("n = %d\r\n", n);
char szBuffer[128];
memset(szBuffer, 0, sizeof(szBuffer));

int ret1 = socket_send("proto=get\ncreator=116\ncreatetime=2005-01-24 01:01:01\nsrc-addr=");
int ret2 = socket_recv(szBuffer, sizeof(szBuffer));
printf("recv msg = %s\r\n", szBuffer);
socket_disconnect();
return 0;
}
#endif




/////////////////////////////////////////////////////////
#ifndef __SOCKETH__
#define __SOCKETH__

#include "sys/socket.h"
#include "netinet/in.h"
#include "arpa/inet.h"
#include "unistd.h"
#include "string.h"


int m_nSocket;
struct sockaddr_in m_sin;

#endif

let5flying 2005-04-01
  • 打赏
  • 举报
回复
同意
page10 2005-03-31
  • 打赏
  • 举报
回复
可是调试过程中
我发现lpReq->Socket是一个四位整数
我感觉已经对他做了该做的初始化工作了
zhousqy 2005-03-31
  • 打赏
  • 举报
回复
mark
ccaesarn 2005-03-31
  • 打赏
  • 举报
回复
lpReq->Socket没有初始化!
你检查一下你之前的代码!
jingtan 2005-03-31
  • 打赏
  • 举报
回复
好象是说不存在该 socket?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧