一个简单的echo服务模型(最原始版本,代码没有优化)
2011-06-21 19:57
537 查看
服务器端:
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <error.h>
#define PORT 8888
#define BACKLOG 5
void process_conn_server(int s);
int main()
{
int ss,sc; /*the socket descriptor of the server and the client*/
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int err; /*the return value*/
pid_t pid;
/*create a stream socket*/
ss = socket(AF_INET,SOCK_STREAM,0);
/*check the return value*/
if(ss < 0)
{
perror("socket error:");
return -1;
}
/*set the struct of the address of the server*/
bzero(&server_addr,sizeof(server_addr)); /*clean*/
server_addr.sin_family = AF_INET;
server_addr.port = htons(PORT);
server_addr.sin_addr.s_addr = htol(INADDR_ANY);
/*bind the socket to the addrs*/
err = bind(ss,(struct sockaddr*)&server_addr,
sizeof(server_addr));
if(err < 0)/*check the return value*/
{
perror("bind error:");
return -1;
}
/*set listen*/
err = listen(ss,BACKLOG);
if(err < 0)
{
perror("listen error:");
return -1;
}
for(;;)
{
int addrlen = sizeof(struct sockaddr);
/*accept a connection and create a new socket descriptor*/
sc = accept(ss,(struct sockaddr*)&client_addr,&addrlen);
if(sc <0)
{
continue;
}
/*create a new process to deal with the new connect*/
pid = fork();
if(pid == 0) /*this is the child process*/
{
close(ss);
process_conn_server(sc); /*the process function*/
}
else /*this is the parent process*/
{
close(sc);
}
}
/*the defination of the process function*/
void process_conn_server(int s)
{
ssize_t size = 0;
char buffer[1024];
for(;;)
{
size = read(s,buffer,1024);
if(size == 0)
{
return ;
}
sprintf(buffer,"%d bytes altogether/n",size);
write(s,buffer,strlen(buffer)+1);/*send to the client*/
}
}
}
客户端:
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <error.h>
#include <error.h>
#define PORT 8888
void process_conn_client(int s);
int main()
{
int s; /*the socket des*/
struct sockaddr_in server_addr;
int err; /*the return value*/
char server_ip[1024];
/*get the server ip address*/
printf("please input the servr ip:");
scanf("%s",server_ip);
s = socket(AF_INET,SOCK_STREAM,0);
if(s < 0)
{
perror("socket error:");
return -1;
}
/*set the address of the server*/
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addf.s_addr = htonl(INADDR_ANY);
inet_pton(AF_INET,server_ip,&server_addr.sin_addr);
/*connect to the server*/
connect(s,(struct sockaddr*)&server_addr,
sizeof(struct sockaddr));
process_conn_clients(s);
close(s);
}
/*the defination of the process function*/
void process_conn_client(int s)
{
ssize_t size = 0;
char buffer[1024];
for(;;)
{
size = read(0,buffer,1024);
if(size > 0)
{
write(s,buffer,size);
size = read(s,buffer,1024);
write(1,buffer,size);
}
}
}
另外一个echo,到现在为止还没弄好,也不知道毛病在哪。
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <error.h>
#define PORT 8888
#define BACKLOG 5
void process_conn_server(int s);
int main()
{
int ss,sc; /*the socket descriptor of the server and the client*/
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int err; /*the return value*/
pid_t pid;
/*create a stream socket*/
ss = socket(AF_INET,SOCK_STREAM,0);
/*check the return value*/
if(ss < 0)
{
perror("socket error:");
return -1;
}
/*set the struct of the address of the server*/
bzero(&server_addr,sizeof(server_addr)); /*clean*/
server_addr.sin_family = AF_INET;
server_addr.port = htons(PORT);
server_addr.sin_addr.s_addr = htol(INADDR_ANY);
/*bind the socket to the addrs*/
err = bind(ss,(struct sockaddr*)&server_addr,
sizeof(server_addr));
if(err < 0)/*check the return value*/
{
perror("bind error:");
return -1;
}
/*set listen*/
err = listen(ss,BACKLOG);
if(err < 0)
{
perror("listen error:");
return -1;
}
for(;;)
{
int addrlen = sizeof(struct sockaddr);
/*accept a connection and create a new socket descriptor*/
sc = accept(ss,(struct sockaddr*)&client_addr,&addrlen);
if(sc <0)
{
continue;
}
/*create a new process to deal with the new connect*/
pid = fork();
if(pid == 0) /*this is the child process*/
{
close(ss);
process_conn_server(sc); /*the process function*/
}
else /*this is the parent process*/
{
close(sc);
}
}
/*the defination of the process function*/
void process_conn_server(int s)
{
ssize_t size = 0;
char buffer[1024];
for(;;)
{
size = read(s,buffer,1024);
if(size == 0)
{
return ;
}
sprintf(buffer,"%d bytes altogether/n",size);
write(s,buffer,strlen(buffer)+1);/*send to the client*/
}
}
}
客户端:
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <error.h>
#include <error.h>
#define PORT 8888
void process_conn_client(int s);
int main()
{
int s; /*the socket des*/
struct sockaddr_in server_addr;
int err; /*the return value*/
char server_ip[1024];
/*get the server ip address*/
printf("please input the servr ip:");
scanf("%s",server_ip);
s = socket(AF_INET,SOCK_STREAM,0);
if(s < 0)
{
perror("socket error:");
return -1;
}
/*set the address of the server*/
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addf.s_addr = htonl(INADDR_ANY);
inet_pton(AF_INET,server_ip,&server_addr.sin_addr);
/*connect to the server*/
connect(s,(struct sockaddr*)&server_addr,
sizeof(struct sockaddr));
process_conn_clients(s);
close(s);
}
/*the defination of the process function*/
void process_conn_client(int s)
{
ssize_t size = 0;
char buffer[1024];
for(;;)
{
size = read(0,buffer,1024);
if(size > 0)
{
write(s,buffer,size);
size = read(s,buffer,1024);
write(1,buffer,size);
}
}
}
另外一个echo,到现在为止还没弄好,也不知道毛病在哪。
相关文章推荐
- 一个简单的Tab平滑切换特效jquery代码,没有做最大效率优化
- 用装饰模式优化代码的一个简单例子
- windows下的网络编程——Select模型实例,一款ECHO服务的实现代码
- 【远程调用框架】如何实现一个简单的RPC框架(三)优化一:利用动态代理改变用户服务调用方式
- 创建一个简单的代码发布服务
- windows下的网络编程——Select模型实例,一款ECHO服务的实现代码
- 网上一堆代码,没有一个真正实现curl传图片成功过的,这儿,我来个成功的,超级简单,扩展性强【广告一下】
- 用装饰模式优化代码的一个简单例子
- 一个简单的通讯服务框架(大家发表意见一起研究)JAVA版本
- 一个简单的通讯服务框架(大家发表意见一起研究)JAVA版本
- 用装饰模式优化代码的一个简单例子
- JavaScript 代码性能优化总结 && 一个最简单的web服务器
- 【OpenCv】OpenCv原始版本与新版本(2.4.10)的一个简单对比
- windows下的网络编程——Select模型实例,一款ECHO服务的实现代码
- 用装饰模式优化代码的一个简单例子
- 一个简单的优化例子(锁问题)
- ZeroMQ消息模型代码实现(Python版本)
- 一个简单的定向爬虫代码
- 一个超简单的php上传类代码
- 九度oj+原始一个字符串左右交换字符最少步数变成含有2012字串+bfs及字符串和整型转换以及没有标记visit数组大小,只能用stl中的vecotr,实际上set更好。有count函数