Linux网络编程1:socket套接字入门

写一个时间上最简单的客户端和服务器:
由客户端发一条数据,服务器接收 在将数据打印出来

原理

客户端/发送端
必须指定连接/发送的IP(广播地址、回环地址或者某个具体地址)。
必须指定连接/发送的port。

服务器/接受端
IP指定为通配地址、回环地址或者某个具体地址。
必须指定绑定监听/接受的port。

TCP客户端和服务器通信原理如图所示,

Linux网络编程1:socket套接字入门_第1张图片
先放代码:

//文件tcp_client.c
#include
#include
#include
#include
int main(int argv,char* argv[]){
//使用方法 gcc tcp_client.c -o tcp_client
//  ./tcp_client 127.0.0.1 8080 helloworld 

    if(4!== argc){
        printf("Usage:%s IP port Message\n",argv[0]);
	return 1;
    }
    //创建套件字
    int fd = socket(AF_INET,SOCK_STREAM,0);//类型,socket数据流,
    
    //设置套接字地址
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    //点分10进制转成32位整形网络序的IP地址
    if(0==inet_aton(argv[1],&arrd.sin_addr)){
	printf("%s is invalid ip \n",argv[1])
	return 0;
    }
    //端口号
    addr.sin_port=htons(atoi(argv[2]));
    
    //服务器
    if(0!=connect(fd,(struct sockaddr* )&addr,sizeof(addr))){
        perror("connect error");
   	return 1;
    }
    
    //写入数据
    write(fd,argv[3],strlen(argv[3]));
    
    //关闭套接字
    close(fd);
}

socket() 函数用来创建套接字,确定套接字的各种属性,然后服务器端要用 bind() 函数将套接字与特定的 IP 地址和端口绑定起来,只有这样,流经该 IP 地址和端口的数据才能交给套接字处理。类似地,客户端也要用 connect() 函数建立连接。

// 服务器文件 tcp_server.c
//gcc tcp_server.c -o tcp_server
// ./tcp_server 0.0.0.0 8080
#include
#include
#include
#include
int main(int argc,char* argv[]){
    if(3!=argc){
    	printf("Usage:%s IP port\n",argv[0]);
        return 1;
    }
    //创建监听套件字
    int fd=socket(AF_INET,SOCK_STREAM,0);
    
    //创建服务器套接字地址
    struct sockaddr_in addr;
    addr.sin_family=AF_INET;
    addr.sin_port=htons(atoi(argv[2]));//主机序转成网络序
    if(0 == inet_aton(argv[1],&addr.sin_addr){
	printf("%s is invalid IP\n",argv[1]);
	return 1;
    }
    //绑定套接字地址
    if(0!=bind(fd,(struct sockaddr*)&addr,sizeof(addr))){
        perror("bind error");
	return 1;
    }
    //设置监听
    if(0!=listen(fd,4)){
    	perror("listen error");
	return 1;
    }

    //创建一个连接套接字,客户端同个这个套接字和服务器联通
    int connfd=accept(fd,NULL,NULL);
    if(connfd<0){
    	perror("accept error");
	return 1;
    }
   //读数据
    char temp[1024];
    read(connfd,temp,sizeof(temp));
    printf("recv: %s",temp);
    //关闭套接字
    close(connfd);
    close(fd);
}

运行程序时写启动服务器,在启动客户端。由于编写代码时只是为了进行测试,当发送helloworld ,服务器接收以后,服务器和客户端就会同时关闭。

你可能感兴趣的:(Socket)