基于Tcp协议的socket例子 linux c语言

来源:互联网 发布:mysql 降序排列 编辑:程序博客网 时间:2024/05/22 11:36

基于Tcp协议的socket例子
服务端:

//// Created by liyihang on 17-10-12.//#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/socket.h>#include <sys/un.h>#include <sys/types.h>#include <unistd.h>#include <sys/ioctl.h>#include <netinet/in.h>#include <arpa/inet.h>#define UDS_PATH "uds_test"#define SERVER_IP "10.199.5.23"#define SERVER_PORT 8001int main(void){    int server_sockfd;//服务端套接字    int client_sockfd;//客户端套接字    char welcome_info[100]="欢迎你链接服务器";    int len;    struct sockaddr_in my_addr;//服务端网络套接字结构体    struct sockaddr_in remote_addr;//客户端网络套接字结构体    int sin_size;    char buf[100];    memset(&my_addr, 0, sizeof(my_addr));//创建内存    my_addr.sin_family=AF_INET;//设置为ip通信    my_addr.sin_addr.s_addr= INADDR_ANY;//服务端地址    my_addr.sin_port = htons(SERVER_PORT);//监听端口    //创建服务器套接字    if ( (server_sockfd = socket(PF_INET, SOCK_STREAM, 0))<0 ){        perror("socket err");        return -1;    }    //绑定套接字到网络地址上    if (bind(server_sockfd, (const struct sockaddr *) &my_addr, sizeof(struct sockaddr))<0){        perror("bind err");        return -1;    }    printf("start listen\n");    //监听链接 设置链接数量    listen(server_sockfd, 5);    sin_size= sizeof(struct sockaddr_in);    printf("start accept\n");    //等待客户端请求链接送达    if ((client_sockfd=accept(server_sockfd, (struct sockaddr *) &remote_addr, &sin_size)) < 0){        perror("accpt err");        return -1;    }    printf("accept client :%s\n", inet_ntoa(remote_addr.sin_addr));    len = send(client_sockfd, welcome_info, 100, 0);    while ((len= (int) recv(client_sockfd, buf, 100, 0)) > 0){        printf("buf content==%s\n", buf);        if (send(client_sockfd, buf, len, 0)<0){            printf("send err\n");            return -1;        }    }    printf("get content end\n");    close(client_sockfd);    close(server_sockfd);    return 0;}

客户端:

//// Created by liyihang on 17-10-16.//#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/ioctl.h>#include <string.h>#include <unistd.h>#define SERVER_PORT 8001int main(int argv, char *argc[]){    int clinet_sockfd;    int len;    struct sockaddr_in remote_addr;//服务器网络地址结构体    char buf[100];    memset(&remote_addr, 0, sizeof(remote_addr));    remote_addr.sin_family=AF_INET;    remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");    remote_addr.sin_port=htons(SERVER_PORT);    if ((clinet_sockfd=socket(PF_INET, SOCK_STREAM, 0))<0){        perror("socket\n");        return -1;    }    //客户端链接服务端    if (connect(clinet_sockfd, (const struct sockaddr *) &remote_addr, sizeof(struct sockaddr)) < 0){        printf("connect err");        return -1;    }    printf("connect server\n");    len=recv(clinet_sockfd, buf, 100,0);    printf("server content:%s\n", buf);    len = send(clinet_sockfd, "hello i m client", strlen(buf), 0);    len = recv(clinet_sockfd, buf, 100, 0);    printf("agin server content:%s\n", buf);    close(clinet_sockfd);    return 0;}

首先运行服务端,然后运行客户端.