有几个问题你要检查一下:
1.如果是用API写,你的套接字要进行初始化,即WSAStartup
2.服务器要绑定,客户端不要绑定(TCP和UDP是一样的)
3.如果是UDP的话,发送是不用绑定的,接收要绑定
4.在你给SOCKADDR_IN进行初始化前,最好先清空一下 memset(&srvaddr,0,sizeof(srvaddr))
试试看行不行?
1.如果是用API写,你的套接字要进行初始化,即WSAStartup
2.服务器要绑定,客户端不要绑定(TCP和UDP是一样的)
3.如果是UDP的话,发送是不用绑定的,接收要绑定
4.在你给SOCKADDR_IN进行初始化前,最好先清空一下 memset(&srvaddr,0,sizeof(srvaddr))
试试看行不行?
解决方案 »
- CSocket里阻塞问题
- Edit控件 做QQ的签名栏的功能,单击可编辑,平时是静态文本。
- 打开多个程序,全部退出时会残留进程的问题
- bmp转换jpg的问题!
- 【顶】【顶】【顶】【顶】能否提供一个贴图的功能??
- 如何加快大文件复制的速度?多线程复制方式是否可取?
- 用CSocket如何发邮件? 包括SMTP身份验证
- 怎样将两个.wav合成一个.wav?
- 如何在DC中以任意倾斜角度输出文字?
- ===================== 超级酷的浏览器Myborswer的病毒!详细特征及解决方案讨论。=====================
- 一个遍历所有局域网内的机器IP,并将一个文件COPY
- 请问大侠,如何得到一个可执行文件(非调试版本)所调用的API?
上面的都没有问题,
我在WIN2000运行客户端和服务器端都没有问题,
就是在WIN98下运行客户端出现上面问题,在WIN98下运行服务器端也没问题.
UINT Workerproc(LPVOID pParam)
{
SOCKET sock=(SOCKET)pParam;
int LeftLen=0;
int ret; while(LeftLen<DEFAULT_BUFFER)
{
ret=recv(sock,g_RBuf+LeftLen,DEFAULT_BUFFER,0);
if(ret<=0)
{
iError=ERROR_READ_FAILURE;
break;
}
LeftLen+=ret;
}
iState=1;
return 0;
}
WSADATA wsd;
SOCKET sClient;
SOCKADDR_IN sock_address;
WORD wVersion;
CWinThread * pThread;
DWORD dwNowTime; iState=0;
iError=0;
wVersion=MAKEWORD(2,0);
if(WSAStartup(wVersion,&wsd)!=0)
{
TRACE("failed to init socket!");
return ERROR_INIT_VERSION;
} sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(sClient==SOCKET_ERROR)
{
TRACE("Create socket failed!");
WSACleanup();
return ERROR_INIT_SOCKET;
} sock_address.sin_family =AF_INET;
sock_address.sin_port =htons(atoi(szPort));
sock_address.sin_addr.s_addr=inet_addr(szIP); if(connect(sClient,(struct sockaddr*)&sock_address,sizeof(sock_address)))
{
closesocket(sClient);
return ERROR_CONN_FAILURE;
} if(!T_Send(sClient,strSource))
{
return ERROR_SEND_FAILURE;
} pThread=AfxBeginThread(Workerproc,(LPVOID)sClient);//这里启动线程,接收
主要是在线程Workerproc(见前面),中recv函数返回-1,用WSAGetLastError()得到WSAEINVAIL信息.
我这个程序是DLL,被其他EXE程序调用的,不知是不是和这有关??