有几个问题你要检查一下:
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))
试试看行不行?
解决方案 »
- vc CFile::Read 的问题
- 窗口句柄获得问题
- 在网上看到个MAPX程序,抱错:Debug Assertion Failed! File: winocc.cpp 没有这个阿??
- 如何实现VC向flash发送消息,如何关联
- 怎样用InstallShield对VC+SQL SERVER 数据库程序打包
- 能否让一个CListCtrl的列表控件里的一格里的字符串分行显示。谢谢
- Lady and Gentleman : help me!thank you !
- VC2008中使用API方式实现托盘气泡的问题!
- error C2065: 'GlobalLock' : undeclared identifier
- help me!!!!!!!!!!!
- 一个遍历所有局域网内的机器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程序调用的,不知是不是和这有关??