简单的客户机服务器投射模拟

下面模拟了,简单的客户机服务器投射模拟的过程。客户机像服务器发送数据,服务器接受到数据后,发送回给客户机。再由客户机打印出来。

需要的函数:

网络方面

服务器


socket(AF_INET,SOCK_STREAM,0);  AF_INET表示IPV4,SOCK_STREAM表示基于字节流的,0表示协议由前面两个参数组合而成。返回描述符

bind(sockdf,(struct sockaddr*)servaddr,sizeof(servaddr));   用于把描述符与本地协议地址联系起来。

listen(listenfd,1024);   监听队列,最多监听1024个连接

accept(listenfd,(struct sockaddr *)&cliaddr,&clilen); 从完成队列里面取出套接字进行链接,如果没有,则睡眠等待。

close(connfd);   关闭连接

客户机

sockfd = socket(AF_INET,SOCK_STREAM,0); 与上面相同

connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); 向服务器发起连接,三次握手是在这里触发

IO方面


fgets(sendline,MAXLINE,stdin);   从标准输入中获取数据写入到sendline中,回车结束

fputs(recvline,stdout);   从缓冲区recvline中读取数据写入到stdout中

read(sockfd,recvline,MAXLINE);   从sockfd中读入数据到recvline中

write(sockfd,sendline,strlen(sendline));   向sockfd中写入sendline中的数据

服务器端代码:


#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <strings.h>
#define SERV_PORT 9877
#define LISTENQ 1024
#define MAXLINE 1024

int main(int argc,char ** argv){
int listenfd,connfd;
pid_t childpid;
socklen_t clilen;
char buf[MAXLINE];
int n;
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,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(listenfd,LISTENQ);

for( ; ; ){
clilen = sizeof(cliaddr);
connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);
if((childpid = fork()) == 0){
close(listenfd);
while((n=read(connfd,buf,MAXLINE)) > 0){
printf("from client:%s",buf);
write(connfd,buf,n);
int i=0;
for(i=0;i<MAXLINE;i++){
buf[i] = ‘\0‘;
}
}
exit(0);
}
close(connfd);
}
}

客户机端代码:


#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <strings.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define MAXLINE 1024
int main(int argc, char const *argv[])
{
int sockfd;
struct sockaddr_in servaddr;

char sendline[MAXLINE],recvline[MAXLINE];

if(argc != 2)
printf("error! to clien IP\n");

sockfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(9877);
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);

connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

while(fgets(sendline,MAXLINE,stdin) != NULL){
write(sockfd,sendline,strlen(sendline));
//fflush(stdin);
read(sockfd,recvline,MAXLINE);
//printf("from server:%s\n", recvline);
fputs(recvline,stdout);
int i;
for(i=0;i<MAXLINE;i++){
recvline[i] = ‘\0‘;
sendline[i] = ‘\0‘;
}

}
exit(0);
}

由于每次发送数据后,服务器端的buf,以及客户机端的sendline
recvline都有上次的旧数据,因此每次都进行一次赋值‘\0‘,保证上次的数据不会对这次产生影响。

运行结果

在终端运行:

gcc -Wall -o serv serv.c

./serv

另开启终端运行:

gcc -Wall -o clien clie.c

./clie 127.0.0.1

此时在客户机端发送数据


[[email protected] tcpip]$ ./clie 127.0.0.1
ffffff
ffffff
dd
dd
gg
gg
hello
hello
heiheieieihehi
heiheieieihehi
fdafdasfdasfdasfdasfdas
fdafdasfdasfdasfdasfdas
d
d

服务器端接收


[[email protected] tcpip]$ ./serv
from client:ffffff
from client:dd
from client:gg
from client:hello
from client:heiheieieihehi
from client:fdafdasfdasfdasfdasfdas
from client:d

简单的客户机服务器投射模拟,布布扣,bubuko.com

时间: 2024-11-03 05:39:29

简单的客户机服务器投射模拟的相关文章

大数据时代,计算模式从客户机/服务器到节点的转变

在数据库时代,计算机在分布体系中的角色有明确划分,不是客户机就是服务器,通常是一台服 务器连着多台客户机,服务器承担存储和计算的工作,客户机负责显示服务器的处理结果.高性能的计算机,比如小型机会被做为服务器,低端的计算机,如个人计 算机成为客户机.这就是以前经常说的Client/Server(客户机/服务器)结构. 到了大数据时代,这种角色已经悄然发生了变化.客户机/服务器的概念已经模糊化,被"节点"的概念取代.而这种变化的原因,归根结底,还是数据处 理需求发生了本质变化,迫使数据处理

使用SocketChannel的NIO客户机服务器通信示例。(转)

这只是长征路上的一小步,以后还有待改进. NIO Selector示意图: 客户端代码: import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.SocketChannel; /** *

如何用Java编写一个简单的服务器和客户机

今天我要向大家介绍的是自己编写的一个比较简单的服务器和客户机程序,注意一下哦,比较简单.好了,闲话休提,砸门直入主题. 小编先从客户机和服务器的模型开始讲解.简单来说,我们实现的这种模型呢,我们每一个用户称为一个客户机,用户之间的通信之间需要一个中转,所有客户机的通信都依托于这个中转,很明显,这个中转,就是砸门的服务器了.整个模型比较简单明了,那么,接下来我们就直接进入实现阶段. 我们从实现服务器开始.Java提供了这样的一个类,ServerSocket.我们通过实例化它的方式来创建一个服务器.

Java网络编程TCP程序,服务器和客户机交互流程以及基本操作步骤。

1.什么是网络编程 网络编程其实就是实现两个计算机的数据交换(交互). 可以通过直接或间接的通过网络协议与其他的计算机进行通讯.(HTTP协议,TCP/IP协议等) 2.Tcp网络编程的实现流程 主要分为服务器端(Server)和客户端(Client). 通过这个图我们其实就可以了解了实现服务器和客户机交互过程是怎么样的了. 实现这些原理最重要的是Socket类也叫做套接字.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 服务器端 1.首先创建ServerSocket对象并

客户机与服务器TCP连接状态

客户机: 服务器:

客户机远程登录服务器

实验客户机远程登录服务器 实验目标:实现客户机远程登录服务器 实验环境: 实验步骤: 一.配置服务器的IP地址为192.168.1.2,win7客户机的IP地址为192.168.1.1 二.关闭服务器和客户机的防火墙 三.将客户机和服务器设置为同一vmnet2 四.打开服务器开始|选择服务管理器 五.选择服务器下面的功能--添加功能 六.选择Telnet服务器|下一步|安装 七.在服务器开始菜单中选择|计算机管理|服务 八.将Telnet服务器的属性选为手动,然后启动 九.打开win7客户机,在

telnet远程管理操作及客户机对服务器的远程管理

实验一.telnet远程管理操作 实验目标 通过给交换机和路由器配置远程管理,并且给交换机配置默认网关,使得在不同网段的主机能够远程管理交换机. 实验环境 一台路由器.两台PC机.两台交换机 实验步骤: 1.给两台PC机配置IP和网关. 2.配置两台交换机S5,S6 3.配置路由器 4.给两台交换机配置默认网关 结果验证 用PC5远程管理S6交换机,PC6远程管理S5交换机 实验二.客户机对服务器的远程管理 实验目标 实验环境 准备两台虚拟机,一台win7做客户机,一台windows serve

01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序

 1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 二 开发 三 性能调优 WLS(Weblogic Server) Weblogic 12c新特性是加入了云支持 2 集群的好处:失败迁移和负载均衡. 3 分布式系统 分布式系统将工作划分到几个独立的模块中. 单个模块出现故障对整个系统的影响较小,这使得分布式系统具有更高的: ----可用性 ----

TCP学习之建立一个简单的客户/服务器系统--回射系统

TCP学习之建立一个简单的客户/服务器系统--回射系统 相关的资料可以参考Unix网络编程,这个只是修改版,不需要依赖任何文件,可以独立编译通过,而且是在两台不同的主机上进行的. fggets和fputs这两个函数来自标准I/O函数库,writen和readline见my_unp.h头文件 //my_unp.h #include<stdarg.h> #include<syslog.h> #include<stdio.h> #include<netinet/in.h