日期:2014-05-16  浏览次数:20620 次

LinuxC,流式套接字,客户端能连接上服务器端,但是彼此收不到对方发出的数据,急急急!
服务器端代码:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<pthread.h>
#include<unistd.h>
#include<errno.h>
#include<netdb.h>
#include<string.h>


int main(int argc, char *argv[])
{
    int sockfd, new_fd;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    int sin_size, portnumber;
    char reply[]="收到数据!";
    char recv_buf[1024]; 
    int nbytes; 
 
    if(argc != 2)
    {
        fprintf(stderr, "Usage:%s portnumber\a\n", argv[0]);
        exit(1);
    }
     
    if((portnumber = atoi(argv[1])) < 0)
    {
         fprintf(stderr, "Usage:%s portnumber\a\n", argv[0]);
         exit(1);
    }

    /*服务器端开始建立socket描述符*/
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == 1)
    {
        fprintf(stderr, "socket error:%s portnumber\a\n", strerror(errno));
        exit(1);
    }
    
    /*服务器端填充sockaddr结构*/
    bzero(&server_addr, sizeof(struct sockaddr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(portnumber);
    /*捆绑sockfd描述符*/
    if(bind(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)
    {
        fprintf(stderr, "Bind error:%s\n\a", strerror(errno));
        exit(1);
    }
    /*监听sockfd描述符号*/
    if(listen(sockfd, 5) == -1)
    {
fprintf(stderr, "Listen error:%s\n\a", strerror(errno));
exit(1);
    }
    printf("服务器进程已开启...\n");    

    while(1)
    {
    /*服务器阻塞,直到客户端程序建立连接*/
    sin_size;
    if((new_fd = accept(sockfd, (struct sockaddr *)(&client_addr), &sin_size)) == -1)
    {
    fprintf(stderr, "Accept error:%s\n\a", strerror(errno));
    exit(1);
    }
    printf("Server get connection from %s\n", ine