C++编写的多线程通信程序,代码编译没有错误(vc),可是服务端与客户端就是连接不上,望高手解答
服务端代码:#include<iostream>#include<windows.h>#pragmacomment(lib,"Ws2_32.lib")usingnames...
服务端代码:
#include<iostream>
#include<windows.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
DWORD WINAPI AnswerThread(LPVOID IpParamter)
{
//SOCKET csSocket=(SOCKET)(LPVOID)IpParamter;
while(1)
{
cout<<"AnswerThread display!"<<endl;
Sleep(1000);
}
}
int main()
{
WORD wVersionRequested;
WSADATA wsadata;
wVersionRequested=MAKEWORD(1,1);
DWORD dwThreadID;
HANDLE hThread;
int err=WSAStartup(wVersionRequested,&wsadata);
if(err!=0)
return 0;
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
hThread=CreateThread(NULL,0,AnswerThread,NULL,0,&dwThreadID);
if(hThread==NULL)
cout<<"create answerthread failed;"<<endl;
CloseHandle(hThread);
closesocket(sockSrv);
return 0;
}
客户端代码:http://zhidao.baidu.com/question/1575265254585928020.html 展开
#include<iostream>
#include<windows.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
DWORD WINAPI AnswerThread(LPVOID IpParamter)
{
//SOCKET csSocket=(SOCKET)(LPVOID)IpParamter;
while(1)
{
cout<<"AnswerThread display!"<<endl;
Sleep(1000);
}
}
int main()
{
WORD wVersionRequested;
WSADATA wsadata;
wVersionRequested=MAKEWORD(1,1);
DWORD dwThreadID;
HANDLE hThread;
int err=WSAStartup(wVersionRequested,&wsadata);
if(err!=0)
return 0;
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
hThread=CreateThread(NULL,0,AnswerThread,NULL,0,&dwThreadID);
if(hThread==NULL)
cout<<"create answerthread failed;"<<endl;
CloseHandle(hThread);
closesocket(sockSrv);
return 0;
}
客户端代码:http://zhidao.baidu.com/question/1575265254585928020.html 展开
展开全部
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
hThread=CreateThread(NULL,0,AnswerThread,NULL,0,&dwThreadID);
if(hThread==NULL)
cout<<"create answerthread failed;"<<endl;
上面一段做一个while循环,已让线程函数操作,如果按照你目前的做法,创建线程成功后,主线程就立即返回了,所以资源都会释放,所以你创建的线程根本不会运行.
另:你的线程应该使用recv( sockSrv, buffer, 1024, 0 )来接收客户端的信息,使用send( sockSrv, data, sizeof( data )来想客户端发送数据,表明你已经登录成功.
hThread=CreateThread(NULL,0,AnswerThread,NULL,0,&dwThreadID);
if(hThread==NULL)
cout<<"create answerthread failed;"<<endl;
上面一段做一个while循环,已让线程函数操作,如果按照你目前的做法,创建线程成功后,主线程就立即返回了,所以资源都会释放,所以你创建的线程根本不会运行.
另:你的线程应该使用recv( sockSrv, buffer, 1024, 0 )来接收客户端的信息,使用send( sockSrv, data, sizeof( data )来想客户端发送数据,表明你已经登录成功.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
会不会是防火墙的原因
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询