通过TCP实现客户端与服务端之间通信

客户端发送的消息,服务端接收并在终端中显示出来

服务端代码(server.c):

#include 
#include 
#include
#include 
#include 
#include 

int main(void)
{
    //1.建立TCP套接字sockfd
    int sockfd = socket(AF_INET,SOCK_STREAM,0);

    //2.绑定套接字sockfd与IP地址和端口号
    struct sockaddr_in addr;//本机地址结构体
    socklen_t len = sizeof(addr);
    bzero(&addr,len);

    addr.sin_family = AF_INET;//协议簇
    addr.sin_addr.s_addr = htonl(INADDR_ANY);//自动获取本机IP
    addr.sin_port = htons(50021);//端口号
    bind(sockfd,(struct sockaddr *)&addr,len);

    //3.设置套接字socket进入监听状态
    listen(sockfd,3);

    //4.等待远程客户端连接请求
    //5.收到请求后,得到一个专用于收发数据的连接套接字connfd
    int connfd = accept(sockfd,NULL,NULL);

    //6.使用连接套接字与客户端通信
    char buf[100];
    while(1)
    {
        bzero(buf,100);
        read(connfd,buf,100);//读取客服端发来的信息
        printf("receive from client massage:%s",buf);
    }
    close(connfd);
    close(sockfd);

    return 0;    
}

客户端代码client.c

#include 
#include 
#include
#include 
#include 
#include 

int main(void)
{
    //1.建立TCP套接字sockfd
    int sockfd = socket(AF_INET,SOCK_STREAM,0);

    //2.绑定套接字sockfd与IP地址和端口号
    struct sockaddr_in addr;//本机地址结构体
    socklen_t len = sizeof(addr);
    bzero(&addr,len);

    addr.sin_family = AF_INET;//协议簇
    addr.sin_addr.s_addr = htonl(INADDR_ANY);//自动获取本机IP
    addr.sin_port = htons(50021);//端口号
    
    //3.对服务端发起连接请求
    if(connect(sockfd,(struct sockaddr *)&addr,sizeof(addr))==0)
    {
        printf("connection sucessful\n");
    }

    //4.与服务端进行通信
    char sendbuf[100];
    while(1)
    {
        bzero(sendbuf,100);
        fgets(sendbuf,100,stdin);//从键盘获取字符,到sendbuf
        write(sockfd,sendbuf,strlen(sendbuf));//发送sendbuf
    }
    
    close(sockfd);

    return 0;    
}

效果图:

 

你可能感兴趣的:(嵌入式学习,tcp/ip,网络,服务器)