当前位置:  技术问答>linux和unix

谁能给一个客户/服务器系统的设计案例呀,小弟想学习!愿出高价!

    来源: 互联网  发布时间:2015-05-13

    本文导语:  谁能给一个客户/服务器系统的设计案例呀,小弟想学习!愿出高价! 小弟想学习linux下的客户/服务器系统的设计,以备以后设计游戏做前期的准备,不知那位大虾肯给一个,我愿出高价!当然是论坛的分了,我是学...

谁能给一个客户/服务器系统的设计案例呀,小弟想学习!愿出高价!
小弟想学习linux下的客户/服务器系统的设计,以备以后设计游戏做前期的准备,不知那位大虾肯给一个,我愿出高价!当然是论坛的分了,我是学生没有钱哦!

|
TCP 客户-服务器例子(一) 
 
   
概述
回射服务器:echo server 

7th 端口; /etc/inetd.conf 

1.客户从标准输入读一行文本,写到服务器上

2.服务器从网络输入读此行,并回射给客户

3.客户读此回射行并写到标准输出。


--------------------------------------------------------------------------------

几个读写有关的函数
fputs 和 fgets 标准库函数

//简单的输入和输出程序:

// mystr_client.c
#include "unp.h"
void main(void)
{
char sendline[MAXLINE],recevline[MAXLINE];
fgets(sendline, MAXLINE, stdin); //标准输入
memcpy(recevline, sendline, strlen(sendline));
fputs(recevline, stdout); //标准输出
}

//writen 和 readline字节流读写函数

ssize_t Writen(int filedes, const void *buff, size_t nbytes);
ssize_t Readline(int filedes, void *buff, size_t maxlen);


--------------------------------------------------------------------------------

TCP回射服务器程序
//main源程序:

#include "unp.h"

int
main(int argc, char **argv)
{
int listenfd, connfd;
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);//9877

Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));//绑定端口

Listen(listenfd, LISTENQ);

for ( ; ; ) {
clilen = sizeof(cliaddr);
connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);//等待客户完成连接accept

if ( (childpid = Fork()) == 0) { /* child process */
Close(listenfd); /* close listening socket */
str_echo(connfd); /* process the request */
exit(0);
}
Close(connfd); /* parent closes connected socket */
}
}



//服务器程序str_echo 函数

//读如一行 Readline

//回射此行 Writen

#include "unp.h"
#include "sum.h"

void
str_echo(int sockfd)
{
ssize_t n;
struct args args;
struct result result;

for ( ; ; ) {
if ( (n = Readn(sockfd, &args, sizeof(args))) == 0)
return; /* connection closed by other end */

result.sum = args.arg1 + args.arg2;
Writen(sockfd, &result, sizeof(result));
}
}


--------------------------------------------------------------------------------

TCP回射客户端程序
//main创建套接口,装填IP地址结构socket bzero与服务器连接connect

#include "unp.h"

int
main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr;

if (argc != 2)
err_quit("usage: tcpcli ");

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));

str_cli(stdin, sockfd); /* do it all */

exit(0);
}


//tcp回射客户程序str_cli函数

#include "unp.h"

void
str_echo(int sockfd)
{
long arg1, arg2;
ssize_t n;
char line[MAXLINE];

for ( ; ; ) {
if ( (n = Readline(sockfd, line, MAXLINE)) == 0)
//从服务器读回射行

return; /* connection closed by other end */

if (sscanf(line, "%ld%ld", &arg1, &arg2) == 2)
snprintf(line, sizeof(line), "%ldn", arg1 + arg2);
else
snprintf(line, sizeof(line), "input errorn");

n = strlen(line);
Writen(sockfd, line, n);//写到服务器
}
}


--------------------------------------------------------------------------------

正常启动

服务器后台启动 ./tcpserv01 &

检查监听套接口状态 netstat –a

过滤:netstat –a |grep 9877

启动客户端程序 ./tcpcli01 127.0.0.1

检查TCP的连接 netstat –a

过滤:netstat –a |grep 9877

检查进程的状态和关系 ps –l

tty控制台 ; pts/0伪终端

pid进程编号 ppid 父进程编号

父进程的ppid 是shell (bash)

状态S 

I 空闲 Idle S 停止 stop Z 僵尸 zombie

状态 WCHAN

键入 EOF (Control-D)结束

 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.print类docflavor的类成员方法:客户端格式化打印数据定义及介绍
  • 如何用jsp或者是java写出一个可以访问客户端的应用(就象activeX一样重服务器下在到客户,用一操做客户的资源)
  • php实现socket实现客户端和服务端数据通信源代码
  • 客户端程序与容器打交道时客户端用什么程序编写?比如银行添单。
  • windows 7下打开或者关闭telnet客户端/服务端命令方法操作步骤
  • 客户端访问的时候,怎么样取得客户的IP地址?
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 在Linux下开发手机客户端或Pc客户端交互的服务器,需要学哪些知识?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • linux端是服务器,客户端连接后,有时并不知道客户端断开,怎么侦测?
  • 如何控制Corba客户端的连接?(比如在服务器上可以关掉客户端的连接)(发言就给分)
  • 用LINUX做HELIX服务器,用W2K做客户机,客户机视频点播,连接时出现问题!!!!
  • linux 能ping通客户端ip,但ping不通客户端的域名。
  • 在单位用windows客户机可在ie设置代理上网,但linux客户机不行
  • 已和客户端连接建立的socket在客户端CTRL-C后怎么在服务器端捕捉这个错误?
  • 对于用客户端上网的用户(客户端不支持linux)如何在linux下上网?
  • 我想做一个添加,修改,删除,查询客户信息的程序,客户信息有姓名,性别,电话,工作单位等哪位大哥哥可以帮我一下给我一个例子,我现在
  • 请问:我发现send函数会使客户端退出, 这怎么办啊,怎样让它不使客户端退出啊,这样我就能重新连上了啊?
  • socket编程,服务器会用bind()绑定端口,而客户端不用绑定端口就可以调用connect()。那么客户端的端口时系统自己分配的么?是何时绑定的?
  • 请问tcp 客户服务器模型(C/S模型)客户端两个send如果发送间隔太短,服务器端为什么会认为受到的只是一个包
  • 服务器端关闭,客户端select 会一直可读, 读的长度是-1,怎么在不关闭客户端socket下,清除可读


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3