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

急!socket编程错误!

    来源: 互联网  发布时间:2016-03-17

    本文导语:  刚编了一个服务器和客户端的程序 功能是客户端向服务器端发送消息,服务器端接受并显示 可是当第一次向服务器端发送消息时,服务器端能正常显示 但是接下来再向服务器端发送时,服务器端没有响应! server.c如...

刚编了一个服务器和客户端的程序
功能是客户端向服务器端发送消息,服务器端接受并显示
可是当第一次向服务器端发送消息时,服务器端能正常显示
但是接下来再向服务器端发送时,服务器端没有响应!
server.c如下:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define      MYPORT 7777 
#define BACKLOG 10

int main(int argc, char **argv)
{
        char buffer[1024];
        int sockfd,new_fd      ;
        int sin_size;
        struct sockaddr_in my_addr ;
        struct sockaddr_in their_addr ;
        if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
        printf("create sockn");
        return -1;
        }
        else
        {
      my_addr.sin_family= AF_INET ;
      my_addr.sin_port= htons(MYPORT);
      my_addr.sin_addr.s_addr=inet_addr("192.168.1.5") ;
      bzero(&(my_addr.sin_zero),8);
      if (bind (sockfd, (struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
        {
 
               printf("bind errorn");
                return -1 ;
        }
      listen(sockfd, BACKLOG);
                sin_size = sizeof(struct sockaddr_in);
                new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
                if(new_fd == -1)
                {
                        printf("accept errorn");
                }
                char *msg = "Hello client! ";
                int len, bytes_sent;
                len = strlen(msg);
                bytes_sent = send(new_fd, msg, len, 0);
                printf("okn");
                int nbytes;
                //bzero(buffer,sizeof(buffer));
                while(1)
                {
                if((nbytes=read(new_fd,buffer,1024))==-1)
                {
                        perror("read errorn");
                        exit(1);
                }
                buffer[nbytes]='';
                printf("I have received:%sn",buffer);
                /*bzero(buffer,sizeof(buffer));
                scanf("%s",buffer);
                int len, bytes_sent;
                bytes_sent = write(sockfd, buffer,strlen(buffer));
                printf("okn");
                */
                //close(new_fd);
                }
                //close(sockfd);
        }
}

client.c 如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define MYPORT 7777
#define BACKLOG 10
int main(int argc, char **argv)
{
        int sockfd;

        char buffer[1024];
        struct sockaddr_in server_addr;
        struct hostent *host;
        int portnumber,nbytes;
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
        {
        printf("socket errorn");
        return -1 ;
        }
        bzero(&server_addr,sizeof(server_addr));
        server_addr.sin_family=AF_INET;
        server_addr.sin_port=htons(MYPORT);
        server_addr.sin_addr.s_addr= inet_addr("192.168.1.5") ;
        int nsock;
        nsock=connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
        if(nsock==-1)
        {
        perror("connect errorn");
        return -1;
        }
        while(1)
        {
/*      if((nbytes=read(sockfd,buffer,1024))==-1)
        {
        printf("read errorn");
        return -1 ;
        }       
        buffer[nbytes]='';
        printf("I have received:%sn",buffer);
        */
        bzero(buffer,sizeof(buffer));
        scanf("%s",buffer);
        int len, bytes_sent;
        bytes_sent = write(sockfd, buffer,strlen(buffer));
        printf("okn");
        }
        close(sockfd);
}

|
server端的接收:while((nbytes=recv(new_fd,buffer,sizeof(buffer), 0)) == -1) 

由于你的socket是阻塞方式的,那么每次recv一定要收全sizeof(buffer)个字节才会返回,否则一直阻塞,
再看看buffer的声明:char buffer[1024]; 那么sizeof(buffer)就是1024,
于是每次recv操作一定要收全1024个字节才会返回。

client端的发送:if((bytes_sent = send(sockfd, buffer,strlen(buffer), 0))  

    
 
 

您可能感兴趣的文章:

  • 在inter版solaris 8上编socket程序,在read时遇到错误,错误号14,用strerror()看不到错误描述,请解决,多谢!
  • ftp连接出现socket错误=#10054的解决方法
  • Linux 下用什么函数查找socket上一次的错误?
  • socket send()函数错误
  • solaris socket 非阻塞recv产生 EBADF 错误
  • 连续创建和关闭1024个socket就会出现问题,错误码24,怎么办?
  • socket下调用write后出现:Broken pipe错误
  • 运行sipp 出现 Unable to bind main socket 错误
  • socket创建失败,返回系统错误码84,invalid or incomplete multibyte or wide character
  • VM下的linux Socket程序怎么客户机一连接就出现Bad address的错误?
  • [紧急求助]socket在read时提示Connection reset by peer错误
  • 请问如何捕获linux c SOCKET中SEND的错误,请指教,谢谢!
  • socket连接函数connect()返回错误 errno 为 115,什么原因?谢谢
  • socket错误提示: Transport endpoint is not connected
  • socket中bind时报权限错误
  • 已和客户端连接建立的socket在客户端CTRL-C后怎么在服务器端捕捉这个错误?
  • LINUX SOCKET 错误
  • 在编译有关socket的例子时老有这些错误,是什么一回事
  • (请高手救命啊!在线等)Socket Send的时候,不停的得到EINTR错误返回, 请问是为什么?
  • 200分!!嵌入式Linux下通过TCP访问服务器,Socket被服务器重置,错误号104??(高手请进)解决后加送100分!!!
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • socket 编程时,write的写入的数据大于socket缓冲区,会有什么结果??
  • Linux下使用openssl api编程socket编程,为什么要编译啊?
  • jquery iis7站长之家
  • linux下socket编程问题!
  • socket编程 中的bind问题
  • socket编程--htons
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • 我的ping程序怎么老是出现Socket operation on non-socket
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • sco unix 下输入 man socket 居然显示 man:socket not found up有分
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 爲何這樣?variable socket might not have been initialized --socket.close()


  • 站内导航:


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

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

    浙ICP备11055608号-3