Linux下客户端和服务器简单代码

客户端
流程:
创建套接字–连接服务器–读写操作(请求数据和回应数据)—关闭套接字

#include <stdio.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>

int main()
{
//创建套接字,AF_INET是IPV4通信,SOCK_STREAM TCP通信套接字,0代表自动
    int sock_fd=socket(AF_INET,SOCK_STREAM,0);
    if(sock_fd<0)
    {
        perror("");
    }
    //创建IPV4地址结构体,并初始化
    struct sockaddr_in server_addr;
    server_addr.sin_family =AF_INET;
    //将32位主机字节序数据转换成网络字节序数,放到IPV4结构体中的端口选项中
    server_addr.sin_port=htons(8080);
    //将服务器地址点分十进制转换成32位大端数据
    inet_pton(AF_INET,"192.168.0.106",&server_addr.sin_addr.s_addr);
    //连接服务器
    connect(sock_fd,(struct sockaddr*)&server_addr,sizeof(server_addr));

    while(1)
    {
        char buf[1024]="";
        write(sock_fd,"hello",5);
        read(sock_fd,buf,sizeof(buf));
        printf("buf=%s\n",buf);
    }
    //关闭套接字
    close(sock_fd);

    return 0;


}

服务器
流程:
创建套接字–绑定IP–监听–提取–读写操作(请求数据和回应数据)–关闭套接字

#include <stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>

int main()
{
//创建套接字
    int lfd=socket(AF_INET,SOCK_STREAM,0);

    struct sockaddr_in server_addr;
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons(8080);
//绑定服务器IP和端口 
   inet_pton(AF_INET,"192.168.0.106",&server_addr.sin_addr.s_addr);
    int ret=0;
    ret=bind(lfd,(struct sockaddr*)&server_addr,sizeof(server_addr));
    if(ret<0)
    {
        perror(" ");
    }
    //监听
    listen(lfd,128);

    struct sockaddr_in client_addr;
    socklen_t len=sizeof(client_addr);
    //提取客户端的套接字并打印客户端的信息
    int cfd=accept(lfd,(struct sockaddr*)&client_addr,&len);
    char ip[INET_ADDRSTRLEN];
    inet_ntop(AF_INET,&client_addr.sin_addr.s_addr,ip,INET_ADDRSTRLEN);
    printf("客户端 IP:%s 端口:%d\n",ip,ntohs(client_addr.sin_port));
//读写操作
    while(1)
    {
        char buf[1024]="";
        int n=read(cfd,buf,sizeof(buf));
        if(n<0)
        {
            perror("");
            break;
        }
        else if(n==0)
        {
            printf("客户端关闭\n");
            break;
        }else
        {
            printf("%s\n",buf);
            write(cfd,buf,n);
        }
    }
    //关闭套接字
    close(lfd);
    close(cfd);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值