当前位置:  技术问答>linux和unix

socket通信client端recv提示socket Connection reset by peer,请问是怎么回事呢?

    来源: 互联网  发布时间:2016-10-06

    本文导语:  /* server.c */ #include  #include  #include  #include  #include  #include  #include  #include  #include  main() {     int sockfd,new_fd;     struct sockaddr_in my_addr;     struct sockaddr_in their_addr;     int sin_size;     //œšÁ¢TCPÌל...

/* server.c */

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 
#include 


main() {

    int sockfd,new_fd;

    struct sockaddr_in my_addr;

    struct sockaddr_in their_addr;

    int sin_size;

    //œšÁ¢TCPÌלӿÚ

    if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) {

        perror("create socket failedn");

        exit(1);

    }

    //³õÊŒ»¯œá¹¹Ì壬²¢°ó¶š2323¶Ë¿Ú

    my_addr.sin_family = AF_INET;

    my_addr.sin_port = htons(2323);

    my_addr.sin_addr.s_addr = INADDR_ANY;

    bzero(&(my_addr.sin_zero),8);

    //°ó¶šÌלӿÚ

    if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1){

        perror("bind failedn");

        exit(1);

    }

    //ŽŽœšŒàÌýÌלӿÚ

    if(listen(sockfd,10)==-1) {

        perror("listen failedn");

        exit(1);

    }

    //µÈŽýÁ¬œÓ

    while(1) {

        sin_size = sizeof(struct sockaddr_in);

        printf("server start runn");

        //Èç¹ûœšÁ¢Á¬œÓ£¬œ«²úÉúÒ»žöȫеÄÌלÓ×Ö

        if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==-1){

            perror("accept failedn");

            exit(1);

        }
        
        printf("fork a son process to recv datan");

        //Éú³ÉÒ»žö×Óœø³ÌÀŽÍê³ÉºÍ¿Í»§¶ËµÄ»á»°£¬žžœø³ÌŒÌÐøŒàÌý

        if(!fork()) {

        //¶ÁÈ¡¿Í»§¶Ë·¢ÀŽµÄÐÅÏ¢
            int numbytes;
            char buff[20];
            memset(buff, 0, 20);
            
            printf("int son processn");

            if((numbytes = recv(new_fd,buff,strlen(buff),0))==-1){

                printf("son: recv data failed because %sn", strerror(errno));                

                exit(1);

            }

            printf("son: recv data: %sn",buff);

            //œ«ŽÓ¿Í»§¶ËœÓÊÕµœµÄÐÅÏ¢ÔÙ·¢»Ø¿Í»§¶Ë

            if(send(new_fd,buff,strlen(buff),0)==-1)

                perror("son: send data reback to client failedn");

            else
                printf("son: send data reback to client sucessn");
            close(new_fd);

            exit(0);

        }

        close(new_fd);

    }

    close(sockfd);

}



/* client.c */

#include

#include 

#include 

#include 

#include 

#include 

#include 

#include 
#include 


int main(int argc,char *argv[]) {

    int sockfd,numbytes;

    char buf[100];

    struct hostent *he;

    struct sockaddr_in their_addr;

    int i = 0;//œ«»ù±ŸÃû×ֺ͵Øַת»»

    he = gethostbyname(argv[1]);

    //œšÁ¢Ò»žöTCPÌלӿÚ

    if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) {

        perror("create socket failedn");

        exit(1);

    }

    //³õÊŒ»¯œá¹¹Ì壬Á¬œÓµœ·þÎñÆ÷µÄ2323¶Ë¿Ú

    their_addr.sin_family = AF_INET;

    their_addr.sin_port = htons(2323);

    their_addr.sin_addr = *((struct in_addr *)he->h_addr);

    bzero(&(their_addr.sin_zero),8);

    //ºÍ·þÎñÆ÷œšÁ¢Á¬œÓ

    if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1){

        perror("connect failedn");

        exit(1);

    }

    //Ïò·þÎñÆ÷·¢ËÍ×Ö·ûŽ®"hello!"

    if(send(sockfd,"hello",6,0)==-1) {

        perror("send 'hello' failedn");

        exit(1);

    }
    printf("send 'hello' successedn");
    

    //œÓÊÜŽÓ·þÎñÆ÷·µ»ØµÄÐÅÏ¢

    if((numbytes = recv(sockfd,buf,100,0))==-1) {

        printf("recv data failed because %sn", strerror(errno));         

        exit(1);

    }

    buf[numbytes] = '';

    printf("recv data: %sn",buf);

    close(sockfd);

    return 0;

}


tt@tt:~/LinuxTest/Socket$ ./client1 tt
send 'hello' successed
recv data failed because Connection reset by peer


tt@tt:~/LinuxTest/Socket$ ./server1
server start run
fork a son process to recv data
int son process
son: recv data: 
son: send data reback to client sucess
server start run




|

将 server.c 中的
 if((numbytes = recv(new_fd,buff,strlen(buff),0))==-1){
改为 if((numbytes = recv(new_fd,buff,sizeof(buff),0))==-1){

|

将 server.c 中的
 if((numbytes = recv(new_fd,buff,strlen(buff),0))==-1){
改为 if((numbytes = recv(new_fd,buff,sizeof(buff),0))==-1){


|
#2 正解, 如果没有东西发送,然后就close掉啦,就会出现这样的问题

    
 
 

您可能感兴趣的文章:

  • 关于socket Connection time out的问题(ARM)
  • [紧急求助]socket在read时提示Connection reset by peer错误
  • 关于网络编程中SOCKET CONNECTION释放的问题 -100 cents
  • Connection reset by peer: JVM_recv in socket input stream read这个问题到底怎么解决??
  • 2002-10-08 03:14:33 - Ctx( ): IOException in: R( + /EditAccount/SearchAccount.jsp + null) Connection aborted by peer: socket w
  • 新手求解Linux Fedora socket连接是提示Connection refused??
  • 关于“ Connection reset by peer: socket write error”错误
  • 关 于 “ Connection reset by peer: socket write error”错误
  • Socket编程connection refused问题
  • unix操作系统上的socket服务器端程序在调用bind涵数的时候报错,是怎么回事了?
  • 在编译有关socket的例子时老有这些错误,是什么一回事
  • linux下的socket 编译段错误是怎么回事,求教
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3