C++编写的多线程通信程序,代码编译没有错误(vc),可是服务端与客户端就是连接不上,望高手解答

服务端代码:
#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通讯流程是可以进行的。而且我调试的时候服务器和客户端代码都返回通讯成功。accept()返回的socket为124,connect返回0,说明通讯是正常的。你需要从操作系统环境找原因了。

 

调试截图如下:

 

服务器端accept返回socket为124

 

 

 

客户端connect返回0

 

 

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-07-30
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 )来想客户端发送数据,表明你已经登录成功.本回答被提问者采纳
第2个回答  2014-11-21
会不会是防火墙的原因

C++编写的多线程通信程序,代码编译没有错误(vc),可是服务端与客户端就...
我调试了你的代码,你的代码是没有问题的,虽然不能使用,但是正常的Socket通讯流程是可以进行的。而且我调试的时候服务器和客户端代码都返回通讯成功。accept()返回的socket为124,connect返回0,说明通讯是正常的。你需要从操作系统环境找原因了。调试截图如下:服务器端accept返回socket为124 客户端connec...

我每次运行c++时总是连接时出错,代码绝对没错。但无法连接
如果你用的是VC6:选择“工程--设置--连接”,在下方的“工程选项”中找到\/subsystem:windows,将其改为\/subsystem:console 如果你用的是VC2005以上版本:单击Project Settings对话框的Link选项卡,将\/SUBSYSTEM:WINDOWS开关改为 \/SUBSYSTEM:CONSOLE 当然你也可以新建一个项目,项目类型为控制台应用程序,这...

c语言编译没有错误,连接有错误是怎么回事?程序本身没错
1、链接错误也不一定是系统的问题,也有可能是程序的问题。如果编译有错的话是不会有链接的,链接要有obj目标文件,编译不通过就没有目标文件。2、连接错误及原因:编译器错误 C2001 错误消息 常数中有换行符 字符串常数不能继续到第二行,除非进行下列操作: •用反斜杠结束第一行。 •用一个双引号结束第一...

VC csocket服务器端代码和客户端代码在一台电脑上正常,在两台电脑上...
如果是,那前者读,后者写,你应该有一个机制保证读的时候,不允许后者写,否则接收线程会覆盖缓冲区数据,让解码线程读不到正确的数据。可以用临界条件CriticalSection,锁之类,信号量之类的实现保证数据一致性。

用C语言编程程序没有错误为什么结果不对
1,保存为c或c++文件 2,根据断点调试找到错误处。3,采用F10或F11单步调试找到精确的错误处。其中f10是跳过函数盗用,f11是进入函数体调试。一般是先用f10,确定函数输入输出是否正确(与自己想的一样),如不一样,则用f11进入函数体一步一步调试。4,在调试过程中,肯定得监视程序中的变量。在vc6...

C++同样的代码 在不同机器上的问题,代码没错,在一台机器上已经完全实现...
操作系统是否不同?比如32位换成64位的,xp换成win7或win8,这些都会产生兼容性问题,试着修改属性用兼容模式运行有时可以解决问题。另外是否使用了特殊的动态链接库之类的与操作系统相关的内容。

我装了c++程序本身没有错误,可是运行后总是提示有一个错误,求教!!!
从图片上看不到你的错误提示,不过看你用的好象是VC6,而写的是C代码,不知道你是如何创建工程的,如果创建的是控制台应用程序,那你的程序是不是Cl编译错误?你试试打开工程菜单,选择Settings,看C\/C++面版中选择Precompiled Headers里面是不是选择的Use precompiled Header file(.pch),如果是的话,...

visual C++问题,编译运行都没有错,但弹不出窗
程序已经运行完了是不会停留在DOS窗口的,在printf("hello world")后面加一句scanf("%d",&i);当然i要事先定义

C++程序编译没有问题,点击运行或者CTRL+F5无任何反应
要是的话,你需要把输出窗口调出来,如图里面的黑色界面。要是你已经调出来输出窗口了,还没反应的话,你那在确定vc是否这在编译,看软件左下方的状态栏,是否正显示“正在编译中……”,你可能会说这么短的程序还需要编译那么久吗!但是这种情况是常见的,也就是你的软件编译文件路径没设置好导致的。

c++网络编程的服务器和客户端是怎么回事?
这个pos机运行的就是客户端程序。服务器程序需要时刻运行,时刻准备接收各种类型请求并处理。客户端程序随便一些,随时运行一次也可以。如果客户端非常多时,服务器程序就忙不过来了,就需要进程池、线程池等排队算法缓解压力,也可以把各个请求以某种分类发送给不同服务器来缓解压力,总之方法有很多,都是...

相似回答