导航

linux 学习之——tcp网络socket编程

Posted on 2013-07-17 18:08  伊4密码  阅读(160)  评论(0)    收藏  举报

服务器端:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>

int main()
{
    int sockfd,new_fd;
    struct sockaddr_in my_addr;
    struct sockaddr_in their_addr;
    int sin_size;
    //建立TCP套接口
    if((sockfd = socket(PF_INET,SOCK_STREAM,0))==-1) {
        printf("create socket error");
        perror("socket");
        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 socket error");
        exit(1);
    }
    //创建监听套接口
    if(listen(sockfd,10)==-1) {
        perror("listen");
        exit(1);
    }

    //等待连接
    while(1) {
        sin_size = sizeof(struct sockaddr_in);

        printf("server is run.\n");
        //如果建立连接,将产生一个全新的套接字
        if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==-1) {
            perror("accept");
            exit(1);
        }
        printf("accept success.\n");
        //生成一个子进程来完成和客户端的会话,父进程继续监听
        if(!fork()) {
            printf("create new thred success.\n");
            //读取客户端发来的信息
            int numbytes;
            char buff[256];
            memset(buff,0,256);
            if((numbytes = recv(new_fd,buff,sizeof(buff),0))==-1) {
                perror("recv");
                exit(1);
            }
            printf("%s",buff);
            //将从客户端接收到的信息再发回客户端
            if(send(new_fd,buff,strlen(buff),0)==-1)
                perror("send");
            close(new_fd);
            exit(0);
        }
        close(new_fd);
    }
    close(sockfd);
}
View Code

 客户端:

 

#include <stdio.h>
#include <stdlib.h>

#include <string.h>
#include <netdb.h>
#include <sys/types.h>

#include <sys/socket.h>

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

    int sockfd,numbytes;
    char buf[100];

    struct sockaddr_in their_addr;
    //int i = 0;
    //将基本名字和地址转换


    //he = gethostbyname(argv[1]);

    //建立一个TCP套接口
    if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) {
        perror("socket");
        printf("create socket error.建立一个TCP套接口失败");
        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);
    inet_aton( "127.0.0.1", &their_addr.sin_addr );


    bzero(&(their_addr.sin_zero),8);
    //和服务器建立连接
    if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1) {
        perror("connect");
        exit(1);
    }
    //向服务器发送数据
    if(send(sockfd,"hello!socket.",6,0)==-1) {
        perror("send");
        exit(1);
    }
    //接受从服务器返回的信息
    if((numbytes = recv(sockfd,buf,100,0))==-1) {
        perror("recv");
        exit(1);
    }
    buf[numbytes] = '\0';
    printf("Recive from server:%s",buf);
    //关闭socket
    close(sockfd);

    return 0;
}
View Code