socket编程客户端连接失败

问题描述

socket编程客户端连接失败

想用socket通信,没法解决客户端连接失败,代码是一本书上的实例,书上的都运行不成功吗,大家帮看下问题在那里,谢谢了
代码如下:
服务器端:###################################################
#include
#include /*引入winsock头文件*/

int main()
{
/*-----------------------------------------*/
/*------------定义变量---------------------*/
/*-----------------------------------------*/
char Sendbuf[100]; /*发送数据的缓冲区*/
char Receivebuf[100]; /*接受数据的缓冲区*/
int SendLen; /*发送数据的长度*/
int ReceiveLen; /*接收数据的长度*/
int Length; /*表示SOCKADDR的大小*/

SOCKET socket_server;   /*定义服务器套接字*/
SOCKET socket_receive;  /*定义用于连接套接字*/

SOCKADDR_IN Server_add; /*服务器地址信息结构*/
SOCKADDR_IN Client_add; /*客户端地址信息结构*/

WORD wVersionRequested; /*字(word):unsigned short*/
WSADATA wsaData;        /*库版本信息结构*/
int error;              /*表示错误*/

/*-----------------------------------------*/
/*------------初始化套接字库---------------*/
/*-----------------------------------------*/
/*定义版本类型。将两个字节组合成一个字,前面是第字节,后面是高字节*/
wVersionRequested = MAKEWORD( 2, 2 );
/*加载套接字库,初始化Ws2_32.dll动态链接库*/
error = WSAStartup( wVersionRequested, &wsaData);
if(error!=0)
{
    printf("加载套接字失败!");
    return 0;   /*程序结束*/
}
/*判断请求加载的版本号是否符合要求*/
if ( LOBYTE( wsaData.wVersion ) != 2 ||
    HIBYTE( wsaData.wVersion ) != 2 )
{
    WSACleanup( );  /*不符合,关闭套接字库*/
    return 0;       /*程序结束*/
}

/*-----------------------------------------*/
/*------------设置连接地址-----------------*/
/*-----------------------------------------*/
Server_add.sin_family=AF_INET;/*地址家族,对于必须是AF_INET,注意只有它不是网络网络字节顺序*/
Server_add.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/*主机地址*/
Server_add.sin_port=htons(5000);/*端口号*/

/*------------创建套接字-------------------*/
/*AF_INET表示指定地址族,SOCK_STREAM表示流式套接字TCP,特定的地址家族相关的协议。*/
socket_server=socket(AF_INET,SOCK_STREAM,0);

/*-----------------------------------------*/
/*---绑定套接字到本地的某个地址和端口上----*/
/*-----------------------------------------*/
/*socket_server为套接字,(SOCKADDR*)&Server_add为服务器地址*/
if(bind(socket_server,(SOCKADDR*)&Server_add,sizeof(SOCKADDR) )==SOCKET_ERROR)
{
    printf("绑定失败
");
}

/*-----------------------------------------*/
/*------------设置套接字为监听状态---------*/
/*-----------------------------------------*/
/*监听状态,为连接做准备,最大等待的数目为5*/
if(listen(socket_server,5)<0)
{
    printf("监听失败
");
}

/*-----------------------------------------*/
/*------------接受连接---------------------*/
/*-----------------------------------------*/
Length=sizeof(SOCKADDR);
/*接受客户端的发送请求,等待客户端发送connect请求*/
socket_receive=accept(socket_server,(SOCKADDR*)&Client_add,&Length);
if(socket_receive==SOCKET_ERROR)
{
    printf("接受连接失败");
}

/*-----------------------------------------*/
/*--------------进行聊天-------------------*/
/*-----------------------------------------*/
while(1)                        /*无限循环*/
{   

    /*--------接收数据---------*/
    ReceiveLen =recv(socket_receive,Receivebuf,100,0);
    if(ReceiveLen<0)
    {
        printf("接收失败
");
        printf("程序退出
");
        break;
    }
    else
    {
        printf("client say: %s
",Receivebuf);
    }   

    /*--------发送数据---------*/
    printf("please enter message:");
    scanf("%s",Sendbuf);
    SendLen=send(socket_receive,Sendbuf,100,0);
    if(SendLen<0)
    {
        printf("发送失败
");
    }
}

/*-----------------------------------------*/
/*---------释放套接字,关闭动态库----------*/
/*-----------------------------------------*/
closesocket(socket_receive);    /*释放客户端的套接字资源*/
closesocket(socket_server);/*释放套接字资源*/
WSACleanup();/*关闭动态链接库*/
return 0;

}

客户端:#####################################################
#include
#include /*引入winsock头文件*/

int main()
{
/*-----------------------------------------*/
/*------------定义变量---------------------*/
/*-----------------------------------------*/
char Sendbuf[100]; /*发送数据的缓冲区*/
char Receivebuf[100]; /*接受数据的缓冲区*/
int SendLen; /*发送数据的长度*/
int ReceiveLen; /*接收数据的长度*/

SOCKET socket_send;             /*定义套接字*/

SOCKADDR_IN Server_add;         /*服务器地址信息结构*/

WORD wVersionRequested;         /*字(word):unsigned short*/
WSADATA wsaData;                /*库版本信息结构*/
int error;                      /*表示错误*/

/*-----------------------------------------*/
/*------------初始化套接字库---------------*/
/*-----------------------------------------*/
/*定义版本类型。将两个字节组合成一个字,前面是第字节,后面是高字节*/
wVersionRequested = MAKEWORD( 2, 2 );
/*加载套接字库,初始化Ws2_32.dll动态链接库*/
error = WSAStartup( wVersionRequested, &wsaData);
if(error!=0)
{
    printf("加载套接字失败!");
    return 0;                   /*程序结束*/
}
/*判断请求加载的版本号是否符合要求*/
if ( LOBYTE( wsaData.wVersion ) != 2 ||
    HIBYTE( wsaData.wVersion ) != 2 )
{
    WSACleanup( );              /*不符合,关闭套接字库*/
    return 0;                   /*程序结束*/
}

/*-----------------------------------------*/
/*------------设置服务器地址---------------*/
/*-----------------------------------------*/
Server_add.sin_family=AF_INET;/*地址家族,对于必须是AF_INET,注意只有它不是网络网络字节顺序*/
/*服务器的地址,将一个点分十进制表示为IP地址,inet_ntoa是将地址转成字符串*/
Server_add.sin_addr.S_un.S_addr = inet_addr("192.168.1.238");
Server_add.sin_port=htons(5000);/*端口号*/

/*-----------------------------------------*/
/*-------------进行连接服务器--------------*/
/*-----------------------------------------*/
/*客户端创建套接字,但是不需要绑定的,只需要和服务器建立起连接就可以了,*/
/*socket_sendr表示的是套接字,Server_add服务器的地址结构*/
socket_send=socket(AF_INET,SOCK_STREAM,0);

/*-----------------------------------------*/
/*-------------创建用于连接的套接字--------*/
/*-----------------------------------------*/
/*AF_INET表示指定地址族,SOCK_STREAM表示流式套接字TCP,特定的地址家族相关的协议。*/
if(connect(socket_send,(SOCKADDR*)&Server_add,sizeof(SOCKADDR)) == SOCKET_ERROR)
{
    printf("连接失败!
");
}

/*-----------------------------------------*/
/*--------------进行聊天-------------------*/
/*-----------------------------------------*/
while(1)    /*无限循环*/
{
    /*---------------发送数据过程----------*/
    printf("please enter message:");
    scanf("%s",Sendbuf);
    SendLen = send(socket_send,Sendbuf,100,0);      /*发送数据*/
    if(SendLen < 0)
    {
        printf("发送失败!
");
    }

    /*--------------接收数据过程---------------*/
    ReceiveLen =recv(socket_send,Receivebuf,100,0); /*接受数据*/
    if(ReceiveLen<0)
    {
        printf("接收失败
");
        printf("程序退出
");
        break;
    }
    else
    {
        printf("Server say: %s
",Receivebuf);
    }
}

/*-----------------------------------------*/
/*---------释放套接字,关闭动态库----------*/
/*-----------------------------------------*/
closesocket(socket_send);/*释放套接字资源*/
WSACleanup();/*关闭动态链接库*/
return 0;

}

解决方案

connect 连接失败,你查看一下具体的错误信息。WSAGetLastError().

解决方案二:

你试试将server绑定到具体的ip地址上看看

解决方案三:

错语代码是19730812,我也没有百度出解决方法,我的打印错误的语句是在64行

解决方案四:

是10060错语

解决方案五:

WSAETIMEDOUT
10060
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

你服务端有没有启动,侦听的端口跟你客户端连接的端口是否一致

解决方案六:

本地通信的话服务器绑定的IP和客户端连接的IP都设置为127.0.0.1,这是主机回环地址,是一张虚拟网卡,每个系统都会有而且一般标准就是127.0.0.1,代表本机。

解决方案七:

Linux socket编程入门及客户端服务器端通信实现 – 提高篇:TCP连接过程分析

解决方案八:

用netstat查看服务的端口是否开启,是否在监听

时间: 2025-01-26 14:38:01

socket编程客户端连接失败的相关文章

锐捷客户端连接失败怎么办

  锐捷客户端连接失败怎么办 锐捷连不上解决办法 方法一:重装网卡 第一步 造成无法认证服务器可能是因为网卡无法正常工作.这时候,可以win+r输入devmgmt.msc,打开设备管理器; 第二步 找到设备管理器--网络适配器,找到本地网卡,可以这样区分,没有wireless的就是本地网卡; 第三步 选中本地网卡,右键单击,然后先[卸载]网卡,等卸载完毕后,再重新[扫描硬件改动]重装网卡,使网卡恢复初始设置. 方法二:修改网卡模式 第一步 单击计算机右下角的网络标识,选中[打开网络共享和中心];

ftp dentos-centos ftp 客户端连接失败

问题描述 centos ftp 客户端连接失败 我是用自己的装有centos 6.5的机器上安装了vsftpd,自己可以通过网页访问设定的用户名下的目录,但是别人无法telnet或者tcp上我的机器,本人机器上为vsftpd分配的端口是21,其状态如下,请大神帮忙解答,在线等,被这个问题困扰了一天.Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PI

tcp连接-TCP连接时,服务端监听socket接收客户端连接后新创建的socket默认绑定的端口是监听端口吗?

问题描述 TCP连接时,服务端监听socket接收客户端连接后新创建的socket默认绑定的端口是监听端口吗? 比如用来监听连接的socket绑定23端口,服务端每接受一个连接都新开一个线程和客户端通信,并把新socket传递给新线程,是不是所有新创建的socket都是经过23端口和客户端通信? 解决方案 是的,都通过端口23进行通信 解决方案二: 都是监听端口,如果不是客户端就不能将数据发送到服务器 解决方案三: 23只是监听建立连接,后续数据交换走实际上端口

在线等。Socket从客户端连接后,服务端无法返回内容,报错。

问题描述 情况如下:我从客户端连接server端.连接创建成功,然后,客户端发送一个注册码,server端也能够接收到.然后,server端返回一个成功提示,这时候,报错了.At2014/9/3011:23:03,执行命令内容时出现错误,原因来自于:远程主机强迫关闭了一个现有的连接.在System.Net.Sockets.Socket.Send(Byte[]buffer,Int32offset,Int32size,SocketFlagssocketFlags)在DEC.SocketCommon.

锐捷客户端连接失败问题排除办法

方法一:重装网卡 1 连接失败可能是网络有问题,我们可以先尝试按下键盘上的 win+r输入devmgmt.msc,打开设备管理器; 2 然后在"设备管理器"中我们再找到"网络适配器"进入之后再找到"本地网卡"这样可以看出有没有wireless的就是本地网卡; 3 现在我们找到"本地网卡"然后右击,在弹出菜单点击[卸载]然后再右击一个点击[扫描硬件改动]重装网卡,使网卡恢复初始设置. 方法二:修改网卡模式 1 在电脑右下角点击&

socket编程与线程模型五

2.socket地址 根据前面的分析,我们可以认为soket句柄和本地的绑定地址共同确定了协议 栈上的数据接收缓冲区或者read缓冲区.而协议栈上的写缓冲区或者发送是被公 用的(但是不同的协议无法公用,例如tcp和udp).所以,对同一个地址,不同 的socket可以收到不同的内容.但是对一个socket上的地址绑扎,无论是显式还 是隐式,只能进行一次. 3.并发连接 如果客户端掉用connect进行连接请求,多个客户端可能存在并发请求.服务 器会把不能响应的请求缓存在listen()指定了大小

网络编程-c++的socket编程,无客户端连接accept却不阻塞,直接返回了,怎么解决

问题描述 c++的socket编程,无客户端连接accept却不阻塞,直接返回了,怎么解决 以下是服务端的代码: #include "stdafx.h" #include "winsock2.h" #include "iostream" #pragma comment (lib,"ws2_32") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADA

c# socket 多线程,为什么我的客户端连接服务端的时候,总是接收不到服务器返回的确认信息呢?

问题描述 socket多线程服务器程序,提供给客户服务,但是客户登录的时候,总是发生服务端返回信息失败,是为什么?是因为服务器的带宽被占用没了吗?如果服务器的带宽不够了,会出现这样的问题吗?该怎么解决呢? 解决方案 解决方案二:写的太简单了,无法回答.Socket连接成功没?协议传输对不对?登录认证通过不?解决方案三:客户端少的时候连接正常当客户端连接的多了(客户端以下载文件为主)会提示服务器返回信息失败解决方案四:帮帮我吧!!!!解决方案五:你描述的不够清楚啊解决方案六:服务端返回信息失败这个

socket编程 ping命令-socket编程——内网ping公网失败

问题描述 socket编程--内网ping公网失败 我电脑连的是铁通的公网,在做一个C/S socket编程.在我一台电脑上客户端和服务器之间可以正常发送数据,但是客户端放到别的可以上网的电脑上时就连不上了.我用ping命令检测过网络情况,基本上都ping不通.只有一次一个同学在公司用他的电脑ping通了,不过是单向的,我还是Ping不通他的,服务器和客户端之间还是发送不了数据.有哪位高手知道是什么原因?谢谢! 服务器端部分代码如下: //设定地址 serv.sin_addr.s_addr=ht