简单的客户端服务器通信程序
来源:互联网 发布:php 评论加回复功能 编辑:程序博客网 时间:2024/06/05 15:28
今天在linux下编写了很简单的客户端/服务器通信程序。
客户端代码如下:
/* The most simple TCP networking progrm*/
/*server.c*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(void)
{
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
int listenfd, connfd;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i,n;
listenfd = socket(AF_INET, SOCK_STREAM, 0);//对于IPV4,family 参数指定为AF_INET,对于TCP协议,type类型指定为SOCK_stream,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_STREAM,表示面向数据报的传输协议。protocol参数指定为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, (struct sockaddr *)&servaddr, sizeof(servaddr));
listen(listenfd,20);
printf("Accepting connections...\n");
while(1){
cliaddr_len=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr *)&cliaddr, &cliaddr_len);
n=read(connfd,buf,MAXLINE);
printf("received from %s at PORT %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)),ntohs(cliaddr.sin_port));
for (i=0; i<n; i++)
buf[i]=toupper(buf[i]);
write(connfd, buf, n);
close(connfd);
}
}
客户端代码如下:
//client.c The function of it is to get an string from command line and send it to the server.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(int argc, char * argv[])
{
struct sockaddr_in servaddr;
char buf[MAXLINE];
int sockfd,n;
char *str;
if(argc!=2){
fputs("usage: ./client message\n", stderr);
exit(1);
}
str=argv[1];
sockfd=socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family=AF_INET;
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
servaddr.sin_port=htons(SERV_PORT);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
while(1);//使得客户端和服务器都处于链接状态
write(sockfd, str, strlen(str));
n=read(sockfd, buf, MAXLINE);
printf("Response from server:\n");
write(STDOUT_FILENO, buf, n);
close(sockfd);
return 0;
客户端代码如下:
/* The most simple TCP networking progrm*/
/*server.c*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(void)
{
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
int listenfd, connfd;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i,n;
listenfd = socket(AF_INET, SOCK_STREAM, 0);//对于IPV4,family 参数指定为AF_INET,对于TCP协议,type类型指定为SOCK_stream,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_STREAM,表示面向数据报的传输协议。protocol参数指定为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, (struct sockaddr *)&servaddr, sizeof(servaddr));
listen(listenfd,20);
printf("Accepting connections...\n");
while(1){
cliaddr_len=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr *)&cliaddr, &cliaddr_len);
n=read(connfd,buf,MAXLINE);
printf("received from %s at PORT %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)),ntohs(cliaddr.sin_port));
for (i=0; i<n; i++)
buf[i]=toupper(buf[i]);
write(connfd, buf, n);
close(connfd);
}
}
客户端代码如下:
//client.c The function of it is to get an string from command line and send it to the server.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(int argc, char * argv[])
{
struct sockaddr_in servaddr;
char buf[MAXLINE];
int sockfd,n;
char *str;
if(argc!=2){
fputs("usage: ./client message\n", stderr);
exit(1);
}
str=argv[1];
sockfd=socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family=AF_INET;
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
servaddr.sin_port=htons(SERV_PORT);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
while(1);//使得客户端和服务器都处于链接状态
write(sockfd, str, strlen(str));
n=read(sockfd, buf, MAXLINE);
printf("Response from server:\n");
write(STDOUT_FILENO, buf, n);
close(sockfd);
return 0;
}
在没有加while(1);这句之前,客户端如下:
服务器端:
加入在客户端,connect()函数之后加入while(1)之后,在统一个终端,先打开服务器端 ./server
再打开客户端,./client
截图如下:
&加在命令后,表示将进程切换到后台去运行。用netstat -apn|grep 8000命令,可以看到它们的链接信息,如上图所示。
服务器的socket是127.0.0.1:8000,前面的是ip地址,后面的8000是端口号。
总结:关于进程的几个命令;
ctrl +z: 将当前正在运行的进程,暂停。它常与 bg连用,bg 1,将当前暂停的1进程切换到后台运行。其中1是作业号,不是进程好pid。
fg:将后台的进程调到前台,如fg 1 表示将作业号为1的进程调到前台执行。
- 简单的客户端服务器通信程序
- 简单的客户端和服务器通信程序
- 基于scoket通信的简单客户端—服务器通信程序
- Python一个简单的通信程序(客户端 服务器)
- 超级详细的客户端服务器简单通信
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- ACE+线程池实现一个简单的服务器+多客户端通信程序
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- 简单的网络通信程序,客户端发送hello,server 服务器反馈 ok UDP
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- Linux基于TCP/IP简单的客户端、服务器通信程序实例
- 实现vs2013客户端服务器之间的简单通信,hello world 程序。
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- struts第十三天--国际化全局访问的国家化资源
- 黑马程序员-注解和反射
- 笔记-2012-Unsupervized Word Segmentation the case for Mandarin Chinese
- 用ping命令判断网络故障
- 图像处理之光源退化效果
- 简单的客户端服务器通信程序
- Shell常用命令总结
- 硬盘安装centos(很简单)
- Java Serializable(序列化)的理解和总结
- jquery 给 action传递 json
- hdu1026 http://acm.hdu.edu.cn/showproblem.php?pid=1026
- 将设备驱动程序模块源码添加到Linux内核模块源码中
- win7建立wifi热点
- 29.wpf程序设计指南[第二章]渐变画刷