网络连接的问题有代码

BMCRNET 2008-07-24 03:58:26
客户端,每次connect的时候出错!
不知道是怎么回事,麻烦分析一下!

客户端

#include <winsock2.h>
#include <stdio.h>
#pragma comment (lib,"ws2_32.lib")

int main(int argc,char *argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

char recvBuf[100];
SOCKET socClient;
SOCKADDR_IN addrSvr;

wVersionRequested = MAKEWORD(2,2);
if((err = WSAStartup(wVersionRequested,&wsaData)) != 0)
{
printf("WSAStartup error!\n");
exit(1);
}
if(LOBYTE(wsaData.wVersion) != 2||HIBYTE(wsaData.wVersion) != 2)
{
WSACleanup();
printf("Pls check socket version!\n");
exit(1);
}

while (1)
{
if(socClient = socket(AF_INET,SOCK_STREAM,0) == INVALID_SOCKET)
{
printf("Create socket fail!\n");
exit(0);
}

addrSvr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSvr.sin_family = AF_INET;
addrSvr.sin_port = htons(8080);

if(connect(socClient,(SOCKADDR *)&addrSvr,sizeof(SOCKADDR)) == SOCKET_ERROR)
{
printf("Connect socket fail!\n");
exit(0);
}

if(send(socClient,"this is cxl request",strlen("this is cxl request")+1,0) == SOCKET_ERROR)
{
printf("Send data fail!\n");
exit(0);
}

if(recv(socClient,recvBuf,100,0) == SOCKET_ERROR)
{
printf("Recve data fail!\n");
exit(0);
}

printf("Get data from server%s\n",recvBuf);
closesocket(socClient);
}
WSACleanup();
return 0;
}



服务端

#include <winsock2.h>
#include <stdlib.h>

#pragma comment (lib,"ws2_32.lib")
int main(int argv,char *argc[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
int len;
char recBuf[100];
char sendBuf[100];

SOCKET socSvr;
SOCKET socCon;
SOCKADDR_IN addrSvr;
SOCKADDR_IN addrCli;
wVersionRequested = MAKEWORD(2,2);

err = WSAStartup(wVersionRequested,&wsaData);
if(err != 0)
{
printf("Pls check the version of socket!\n");
exit(1);
}

if(LOBYTE(wsaData.wVersion) != 2||HIBYTE(wsaData.wVersion) != 2)
{
printf("wsaData.wVersion != 2\n");
WSACleanup();
exit(1);
return 0;
}

if((socSvr = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
{
printf("Create socket fail!\n");
exit(0);
}

addrSvr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSvr.sin_family = AF_INET;
addrSvr.sin_port = htons(8080);

if(bind(socSvr,(SOCKADDR *)&addrSvr,sizeof(SOCKADDR)) == SOCKET_ERROR)
{
printf("bind socket fail!\n");
exit(0);
}

if(listen(socSvr,5) == SOCKET_ERROR)
{
printf("listen socket fail!\n");
exit(0);
}

len = sizeof(SOCKADDR);
while(1)
{
//接受客户端的请求,并与客户端建立连接
if((socCon = accept(socSvr,(SOCKADDR *)&addrCli,&len)) == INVALID_SOCKET)
{
printf("create connect with client fail!\n");
exit(0);
}
if(recv(socCon,recBuf,100,0) == SOCKET_ERROR )
{
printf("recv data fail!\n");
exit(0);
}
else
{
printf("get client data:%\s\n",recBuf);
}

sprintf(sendBuf,"Welcome %s to cxl server",inet_ntoa(addrCli.sin_addr));

if(send(socCon,sendBuf,strlen(sendBuf)+1,0) == SOCKET_ERROR)
{
printf("send data fail!\n");
exit(0);
}
closesocket(socCon);
}
WSACleanup();
return 0;
}


...全文
68 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BMCRNET 2008-08-19
  • 打赏
  • 举报
回复
是在不好意思哈

好久没有看整个帖子了

回楼上

确实在是VC6上编译
BAYNPU 2008-07-24
  • 打赏
  • 举报
回复
请问楼主该源程序是不是在C++6.0编译吗?
BMCRNET 2008-07-24
  • 打赏
  • 举报
回复

#include <winsock2.h>
#include <stdio.h>
#pragma comment (lib,"ws2_32.lib")

int main(int argc,char *argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

char recvBuf[100];
SOCKET socClient;
SOCKADDR_IN addrSvr;

wVersionRequested = MAKEWORD(2,2);
if((err = WSAStartup(wVersionRequested,&wsaData)) != 0)
{
printf("WSAStartup error!\n");
exit(1);
}
if(LOBYTE(wsaData.wVersion) != 2||HIBYTE(wsaData.wVersion) != 2)
{
WSACleanup();
printf("Pls check socket version!\n");
exit(1);
}

while (1)
{ //这个地方少括号了!符号优先级问题
if((socClient = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
{
printf("Create socket fail!\n");
exit(0);
}

addrSvr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSvr.sin_family = AF_INET;
addrSvr.sin_port = htons(8080);

if(connect(socClient,(SOCKADDR *)&addrSvr,sizeof(SOCKADDR)) == SOCKET_ERROR)
{
printf("Connect socket fail!\n");
exit(0);
}

if(send(socClient,"this is cxl request",strlen("this is cxl request")+1,0) == SOCKET_ERROR)
{
printf("Send data fail!\n");
exit(0);
}

if(recv(socClient,recvBuf,100,0) == SOCKET_ERROR)
{
printf("Recve data fail!\n");
exit(0);
}

printf("Get data from server%s\n",recvBuf);
closesocket(socClient);
}
WSACleanup();
return 0;
}



自己应该扇自己两下子!
哎...........
BMCRNET 2008-07-24
  • 打赏
  • 举报
回复
accept设置断点后,
调试时候程序就静止到该函数。

客户端调试:
程序到connect 后出错!
WSAGetLastError = 10038
cnzdgs 2008-07-24
  • 打赏
  • 举报
回复
在同一台电脑上,先运行服务端,再运行客户端。注意看一下是否被防火墙阻止了。调试服务端,在accept后面设置断点,看看能否执行到。

问题要发对板块才有利于解决,应该移动到VC/MFC—网络编程版本去。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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