8月20作业

TCP一对一双向通信

1.服务器端

#include <stdio.h>                                                      
#include <sys/types.h>                                                  
#include <sys/socket.h>                                                 
#include <netinet/in.h>                                                 
#include <arpa/inet.h>                                                  
#include <string.h>                                                     
#include <stdlib.h>                                                     
#include <unistd.h>                                                     
#include <sys/stat.h>                                                   
#include <fcntl.h>                                                      
#include <pthread.h>                                                    
                                                                        
int acpt_fd = -1;                                                       
                                                                        
void *server_send(void *ptr)                                            
{                                                                       
    char *buf = malloc(100);                                            
    while(1)                                                            
    {                                                                   
        memset(buf, 0, 100);                                            
        fgets(buf, 100, stdin);                                         
        send(acpt_fd, buf, strlen(buf), 0);                             
    }                                                                   
}                                                                       
                                                                        
int main(int argc, const char *argv[])                                  
{                                                                       
    if(argc != 3)                                                       
    {                                                                   
        printf("请输入IP和端口号\n");                                   
        return -1;                                                      
    }                                                                   
    //1.创建套接字文件                                                  
    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);                    
    if(socket_fd == -1)                                                 
    {                                                                   
        perror("creat socket failed");                                  
    }                                                                   
    //2.绑定服务器地址                                                  
    struct sockaddr_in server,client;                                   
    server.sin_family = AF_INET;                                        
    server.sin_port = htons(atoi(argv[2]));                             
    server.sin_addr.s_addr = inet_addr(argv[1]);                        
                                                                        
    bind(socket_fd, (struct sockaddr *)&server, sizeof(server));        
   
    //3.监听                                                             
    listen(socket_fd, 4);                                                
    //4.等待连接                                                         
    printf("等待连接....\n");                                            
    socklen_t client_len = sizeof(client);                               
    acpt_fd = accept(socket_fd, (struct sockaddr*)&client, &client_len); 
    printf("连接成功!!!\n");                                             
    //5.接收消息                                                         
    char *buf = malloc(100);                                             
    //创建线程                                                           
    pthread_t tid;                                                       
    pthread_create(&tid, 0, server_send, NULL);                          
    int num = 0;                                                         
    while(1)                                                             
    {                                                                    
        memset(buf, 0, 100);                                             
        num = recv(acpt_fd, buf, 100, 0);                                
        printf("客户端:%s", buf);                                        
    }                                                                    
    close(socket_fd);                                                    
    return 0;                                                            
}                                                                        

2.客户端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>

int socket_fd = -1;

void *client_recv(void *ptr)
{
    char *buf = malloc(100);
    while(1)
    {
        memset(buf, 0, 100);
        recv(socket_fd, buf, 100, 0);
        printf("服务器:%s",buf);
    }
}

int main(int argc, const char *argv[])
{
    if(argc != 3)
    {
        printf("请输入IP和套接字\n");
        return -1;
    }
    //1.创建套接字文件
    socket_fd = socket(AF_INET, SOCK_STREAM, 0);
    if(socket_fd == -1)
    {
        perror("creat socket failed");
    }
    //2.绑定服务器地址                                                         
    struct sockaddr_in server;
    server.sin_family = AF_INET;
    server.sin_port = htons(atoi(argv[2]));
    server.sin_addr.s_addr = inet_addr(argv[1]);

    bind(socket_fd, (struct sockaddr *)&server, sizeof(server));
    //4.等待连接
    printf("发起连接....\n");
    connect(socket_fd, (struct sockaddr *)&server, sizeof(server));
    printf("连接成功!!!\n");

    //5.发送消息
    char *buf = malloc(100);
    //创建线程
    pthread_t tid;
    pthread_create(&tid, 0, client_recv, NULL);
    while(1)
    {
        memset(buf, 0, 100);
        fgets(buf, 100, stdin);
        send(socket_fd, buf, strlen(buf), 0);
    }
    close(socket_fd);  
    return 0;          
}                      

3.运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值