Linux网络编程之TCP编程

直接上代码如下所示:

1、头文件定义

#ifndef __HEAD_NET_H__
#define __HEAD_NET_H__

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

#define PORT 8888
#define SRV_IP "192.168.7.3"
#define N 5
#define SIZE 1024

#define p_error(str) ({\
	perror(str);\
	exit(1);})


#endif

2、服务器端代码

#include "head_net.h"

int main(int argc,char **argv)
{
    int sock_fd,conn_fd;
    struct sockaddr_in sin,cin;
    socklen_t len;
    char cli_ip[16];
    char buf[SIZE];
    int ret;

    /*1:创建socket*/
    //if( (sock_fd = socket(AF_INET,SOCK_STREAM,0)) < 0) 
    sock_fd = socket(AF_INET,SOCK_STREAM,0);
    if(sock_fd < 0) 
	p_error("socket");	

    int on = 1;
    if(setsockopt(sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)) < 0)
	p_error("setsockopt");
    /*2:绑定地址*/
    bzero(&sin,sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(PORT);
    sin.sin_addr.s_addr = inet_addr(SRV_IP);
    
    if(bind(sock_fd,(struct sockaddr*)&sin,sizeof(sin)) < 0)
	p_error("bind");
    /*3:监听*/
    if(listen(sock_fd,N) < 0)
	p_error("listen");
    /*4:连接,三次握手*/
    printf("stat connect!\n");
    len = sizeof(cin);
    if( (conn_fd = accept(sock_fd,(struct sockaddr*)&cin,&len))<0)
	p_error("accept");
    strcpy(cli_ip,inet_ntoa(cin.sin_addr));
  
    /*5:通信*/
    while(1){
	bzero(buf,SIZE);
	if( (ret = read(conn_fd,buf,SIZE)) < 0)
	    p_error("read");
	else if(0 == ret){
	    close(sock_fd);
	    break;
	}
	if(strncmp(buf,"quit",4) == 0)
	    break;
	printf("%s:%s",cli_ip,buf);
    }   

    /*6:关闭socket*/
    shutdown(conn_fd,2);
    return 0;
}

3、客户端代码

#include "head_net.h"

int main(int argc,char **argv)
{
    int conn_fd;
    struct sockaddr_in sin;
    char buf[SIZE];

    /*1:创建socket*/
    if( (conn_fd = socket(AF_INET,SOCK_STREAM,0)) < 0) 
     p_error("socket");	

    /*2:建立连接,三次握手*/

    bzero(&sin,sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(PORT);
    sin.sin_addr.s_addr = inet_addr(SRV_IP);
   

    if( connect(conn_fd,(struct sockaddr*)&sin,sizeof(sin)) < 0)
	p_error("connect");

    /*3:通信*/

    do{
	bzero(buf,SIZE);
	fgets(buf,SIZE,stdin);
	if(write(conn_fd,buf,strlen(buf)) < 0)
		p_error("write");
    }while(strncmp(buf,"quit",4) != 0);

    /*4:关闭socket*/
    close(conn_fd);
    return 0;
}


猜你喜欢

转载自blog.csdn.net/sam1437/article/details/38089353