unix网络编程----迭代式echo服务器与客户端(只支持一个客户端通信)
来源:互联网 发布:mac怎么批量删除照片 编辑:程序博客网 时间:2024/05/17 07:31
分别用gcc编译两个代码为可执行程序client和server之后,在一个终端里运行./server启动服务器,在另一个终端运行./client 127.0.0.1后,就可以在client终端里面输入任意字符然后回车,输入的字符会发送到服务器,然后被服务器返回来,在client终端里显示,起到"echo"的效果。此代码可以作为网络编程基础设置的参考。
参考资料:<<UNIX Network Programming Volumn1:The Sockets Networking API>> W.Richard Stevens,Bill Fenner,Andrew M.Rudoff
客户端代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#define BUFFSIZE 4096
#define SERV_PORT 9877
#define SA struct sockaddr
#define LISTENQ 1024
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
int
main(int argc, char **argv)
{
struct timeval tpstart,tpend;
char buf[BUFFSIZE];
double timeuse;
int sockfd;
int tffd;
char time[64];
ssize_t n;
struct sockaddr_in servaddr;
if(argc != 2){
printf("usage: cmd <IPaddress>/n");
exit(0);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
connect(sockfd, (SA *) &servaddr, sizeof(servaddr));
gettimeofday(&tpstart,NULL);
printf("time got!/n");
while(1)
{
if((n = read(STDIN_FILENO,buf,BUFFSIZE)) == 0)
break;
n = write(sockfd, buf, n);
n = read(sockfd, buf, BUFFSIZE);
n = write(STDOUT_FILENO,buf,n);
}
gettimeofday(&tpend,NULL);
timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;
timeuse/=1000000;
gcvt(timeuse, 10, time);
tffd = creat("time.txt", 0644);
write(tffd, time, 64);
close(tffd);
exit(0);
}
服务器代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#define MAXLINE 4096
#define SERV_PORT 9877
#define SA struct sockaddr
#define LISTENQ 1024
int
main(int argc, char **argv)
{
int listenfd, connfd;
char buf[MAXLINE];
ssize_t n;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr, servaddr;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
listen(listenfd, LISTENQ);
while(1){
clilen = sizeof(cliaddr);
connfd = accept(listenfd, (SA *) &cliaddr, &clilen);
while(1)
{
if((n = read(connfd, buf, MAXLINE)) == 0)
break;
n = write(connfd,buf,n);
}
close(connfd);
}
}
- unix网络编程----迭代式echo服务器与客户端(只支持一个客户端通信)
- UNIX网络编程----多线程echo服务器与客户端
- Linux网络编程-客户端与服务器端通信(Echo)
- C++ 服务器与客户端通信 (网络编程)
- UNIX网络编程----多进程并发服务器(这样就支持多个客户端连接了)
- Unix网络编程之点对点聊天-客户端与服务器实现
- Java网络编程之服务器与客户端通信
- Java网络编程之服务器与客户端通信
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(一)
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(二)-解决客户端一直等待问题
- Java实现服务器与客户端网络通信
- 网络通信_TCP客户端与服务器
- Linux下网络socket编程——实现服务器(select)与多个客户端通信
- 基于select和epoll的Echo服务器与客户端编程
- Linux网络编程--多线程实现echo服务器与客户端“一对多”功能,网络编程的“Hello World!” - 壮壮熊
- Java Socket编程(服务器与客户端通信)
- 一个服务器与两个客户端的通信
- Linux网络编程-客户端与服务器端通信
- 注释方法,读《华为编程规范和范例》笔记
- rsync备份系统
- 存储器的寻址问题
- POJ 1564
- wait系统调用解析
- unix网络编程----迭代式echo服务器与客户端(只支持一个客户端通信)
- uva Boxes 11003
- js 常用代码
- U盘安装linux
- 黄色识别
- poj 1679 判断最小生成树是否唯一
- 电子工程师必须掌握的20种模拟电路
- asp.net中js调用服务端方法,服务端调用JS,实现无刷新的倒计时
- GUI Design Studio