套接字编程

xuwei525634673 2013-04-26 03:52:49
测试工具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);
}
}
}




...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShengFei01 2013-04-26
  • 打赏
  • 举报
回复
直接拿这的socket例子测试,服务器和客户端都有,不用自己写: http://download.csdn.net/detail/geoff08zhang/4571358
赵4老师 2013-04-26
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html 学会使用抓包软件。
buyong 2013-04-26
  • 打赏
  • 举报
回复
volatile char sendBuf[1000];
xuwei525634673 2013-04-26
  • 打赏
  • 举报
回复
求高手指点!

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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