套接字编程
测试工具Sockettool作为客户端,下面C++程序作为网络端,能连接但是不能相互发送数据,recv返回值-1.不知如何解决!
#include <Winsock2.h>
#include <stdio.h>
#include <time.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
char sendBuf[1000];
SOCKET s;
void main ()
{
// 加载套接字
WORD wVersionRequested;
WSADATA wsaDATA;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaDATA);
if(err!=0)
{
return;
}
if(LOBYTE(wsaDATA.wVersion)!=1 || HIBYTE(wsaDATA.wVersion)!=1)
{
WSACleanup();
return;
}
//创建非阻塞套接字
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
int nRet;
unsigned long ul=1;
nRet=ioctlsocket(sockSrv, FIONBIO, (unsigned long*)&ul);
if (nRet == 0)
{
printf("1688888888\n");
}
else
{
return;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
// 绑定套接字
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
// 设置监听模式
listen(sockSrv,10000);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
//等待客户到来
SOCKET s=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
sprintf(sendBuf,"%s","poerwfpowef");
Sleep(40000);
//while(1)
// {
// gets(sendBuf);
// }
closesocket(s);
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
char recvBuf[1000]={0};
int nlen;
while(1)
{
nlen = recv(s,recvBuf,sizeof(recvBuf),0);
// printf("%d",nlen);
//接收数据
if(nlen>0)
{
// printf("服务端接收数据:\n");
printf("recvBuf[%s]:\n",recvBuf);
memset(recvBuf,0,sizeof(recvBuf));
Sleep(1);
}
}
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
while(1)
{
//发送数据
if(strlen(sendBuf)!=0)
{
send(s,sendBuf,strlen(sendBuf),0);
printf("sendbuf[%s]:\n",sendBuf);
memset(sendBuf,0,sizeof(sendBuf));
Sleep(1);
}
}
}