直接上代码如下所示:
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;
}