linux tcp通讯工具,Linux 下 简单客户端服务器通讯模型(TCP)

Linux 下 简单客户端服务器通讯模型(TCP)

服务器端:server.c

#include#include#include#include#include#include#include#include#include#include

#define ServerPort 6080

#define MaxUser 8typedefstruct_server{intsock_fd;intnew_fd;structsockaddr_in my_addr;

} Server;

typedefstruct_client{intsock_fd;structsockaddr_in my_addr;

} Client;static Server *server;static Client *client;void socket_server_init(Server *server){

server-> my_addr.sin_family =AF_INET;

server-> my_addr.sin_port =htons(ServerPort);

server-> my_addr.sin_addr.s_addr =INADDR_ANY;

bzero(&(server -> my_addr.sin_zero),8);

}int socket_server_create_bind_listen(Server *server){intsin_size,ret, on;if((server -> sock_fd = socket(AF_INET,SOCK_STREAM,0)) == -1){

perror("faild to create socket :\n");return -1;

}

on= 1;

ret= setsockopt( server -> sock_fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );if(ret=bind(server ->sock_fd,

(struct sockaddr *)&server ->my_addr,sizeof(struct sockaddr))==-1){

perror("failed to bind \n");return -1;

}if(listen(server -> sock_fd,MaxUser)==-1){

perror("failed to listen \n");return -1;

}return 1;

}void server_send_msg(intfd){char buff[1024];while(1){

fgets(buff,1024,stdin);if(send(fd,buff,1024,0)==-1){

perror("error to send :");break;

}

}

}void server_wait_service(Server *server,Client *client){intnew_fd ,ret,sin_size;char buf[1024];

pthread_t tid;

sin_size= sizeof(client ->my_addr);

new_fd= accept(server ->sock_fd,(struct sockaddr *)&client->my_addr,&sin_size);if(new_fd <= 0){

perror("accept error :");

}else{

ret= pthread_create(&tid,NULL,server_send_msg,new_fd);if(ret!=0){

perror("error to create pthread");

}while(1){if(recv(new_fd,buf,sizeof(buf),0)>0){

printf("\nclient said:\t\t%s\n",buf);

}

}

}

}int main(int arg, char *argv[]){

server= (Server *)malloc(sizeof(Server));

client= (Client *)malloc(sizeof(Client));

socket_server_init(server);if(socket_server_create_bind_listen(server)){

server_wait_service(server,client);

}return 0;

}

客户端代码:client.c

#include#include#include#include#include#include#include#include

#define ServerPort 6080typedefstruct_server{intsock_fd;intnew_fd;structsockaddr_in my_addr;

} Server;

typedefstruct_client{intsock_fd;structsockaddr_in my_addr;

} Client;

Server*server;

Client*client;void socket_server_init(Server *server){

server-> my_addr.sin_family =AF_INET;

server-> my_addr.sin_port =htons(ServerPort);

server-> my_addr.sin_addr.s_addr =INADDR_ANY;

bzero(&(server -> my_addr.sin_zero),8);

}void socket_client_init(Client *client){

client-> my_addr.sin_family =AF_INET;

client-> my_addr.sin_port = htons(ServerPort+10);

client-> my_addr.sin_addr.s_addr =INADDR_ANY;

bzero(&(client -> my_addr.sin_zero),8);

}int socket_client_create_connect(Server * server,Client *client){if((client -> sock_fd = socket(AF_INET,SOCK_STREAM,0)) == -1){

perror("failed to create client socket \n");return -1;

}else if(connect(client ->sock_fd,

(struct sockaddr *)&server ->my_addr,sizeof(server ->my_addr))==-1){

printf("failed to connect the server \n");return -1;

}else

return 1;

}void client_recv_msg(Client *client){char buf[1024];while(1){if(recv(client->sock_fd,buf,sizeof(buf),0)>0){

printf("\nserver said :\t\t%s\n",buf);

}else break;

}

}int main(int argc,char*argv[]){

server= (Server *)malloc(sizeof(Server));

client= (Client *)malloc(sizeof(Client));char data[1024];

socket_server_init(server);

socket_client_init(client);

pthread_t tid;if(socket_client_create_connect(server,client)){

pthread_create(&tid, NULL,client_recv_msg, client);while(1){

fgets(data,1024,stdin);if(send(client->sock_fd,data,1024,0)==-1){

perror("error to send :");break;

}

}

}return 0;

}

Makefile:

all: server client

server: server.c

gcc-o server server.c -pthread

client: client.c

gcc-o client client.c -pthread

clean:

rm-f server client

执行效果:

server:

[email protected]:/mnt/hgfs/E/Lessons/个人总结/chat# ./server

client said: hello

hehe

client said: g

client said: goodbay

client:

[email protected]:/mnt/hgfs/E/Lessons/个人总结/chat# ./client

hello

server said : hehe

s^Hg

goodbay

去年的代码,做个备份。

原文:http://www.cnblogs.com/lonelyxmas/p/4157000.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值