⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 39.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>123</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="18.htm">上一层</a>][<a href="40.htm">下一篇</a>]
<hr><p align="left"><small>发信人: beyondfan.bbs@linux.wuhee.edu.cn (叮当), 信区: Linux <br>

标  题: UNIX网络编程入门之二 <br>

发信站: wuhee bbs (Sun Mar 21 05:38:59 1999) <br>

转信站: whbbs!rjgcnews!wuheebbs <br>

  <br>

四、套接字编程示例 <br>

下面给出一个运用字节流套接字在TCP/IP网络上实现客户机/服 <br>

务器方式进程通信的实例。 <br>

在此例中,服务进程先于客户进程运行,当双方建立连接后,服务 <br>

进程通过该连接向客户进程不断发送一个连续增长的序列数,客户进 <br>

程每接收到50个序列数就在屏幕上显示一个‘.',显示至20个点后换 <br>

行,直至任意一方进程被中断为止。 <br>

/******server.c******/ <br>

# include <sys/types.h> <br>

# include <sys/socket.h> <br>

# include <netinet/in.h> <br>

# include <netdb.h> <br>

# include <stdio.h> <br>

main() <br>

{ <br>

int sock,namelen,seq,netint; <br>

struct sockaddr-in server; <br>

//存服务器的internet地址 <br>



char msgsock; <br>

char buf[1024]; <br>

//创建internet域的TCP协议的字节流套接字 <br>

sock=socket(AF-INET,SOCK-STREAM,IPPROTO-TCP); <br>

if(sock<0){ <br>

perror("socket"); <br>

exit(1); <br>

} <br>

//将本地主机(服务器)的地址捆扎到创建的套接字上 <br>

server.sinfamily=AF-INET; <br>

//internet域 <br>

sevrer.sinaddr.s-addr=INADDR-ANY; //使用任意合法地址 <br>

sevrer.sinport=htons(1032); <br>

//公认的服务端口号 <br>

if(bind(sock,&server,sizeof(server))<0){ <br>

perror("bind"); <br>

exit(2); <br>

} <br>

//建立长度为5的监听队列,从套接字上收听连接请求 <br>

if(listen(sock,5)<0){ <br>

perror("listen"); <br>

exit(3) <br>

exit(3) <br>

} <br>

//阻塞至客户方有连接请求到来,建立一新套接字用于通信 <br>

namelen=sizeof(server); <br>

if((msgsock=accept(sock,&server,&namelen))<0){ <br>

perror("accept"); <br>

exit(4); <br>

} <br>

//此时连接已建立,可以进行通信 <br>

seq=0; <br>

for(;;){ <br>

netint=htonl(seq); <br>

//主机字节顺序转为网络字节顺序 <br>

write(msgsock,&netint,4); <br>

//向客户方写序列数 <br>

seq++; <br>

} <br>

} <br>

/******client.c******/ <br>

# include <sys/types.h> <br>

# include <sys/socket.h> <br>

# include <netinet/in.h> <br>

# include <netdb.h> <br>



# include <stdio.h> <br>

main(argc,argv) <br>

int argc; <br>

char *argv[]; <br>

{ <br>

int sock,myseq,recvseq; <br>

struct sockaddr-in server;//存服务器的internet地址 <br>

struct hostcnt *h;//存主机信息 <br>

//命令行必须跟参数:服务器的主机名,该主机 <br>

//必须在/etc/hosts文件中定义,例如: <br>

// 192.7.100.31 hp486 <br>

if(argc!=2){ <br>

printf("Usage:%s servername\n",argv[0]; <br>

exit(1); <br>

} <br>

//创建internet域TCP协议的字节流套接字 <br>

sock=socket(AF-INET,SOCK-STREAM,IPPROTO-TCP); <br>

if(sock<0){ <br>

perror("socket"); <br>

exit(2); <br>

} <br>

//根据命令行参数提供的服务器主机名,取得服务器的地址 <br>



if(!(h=gethostbyname(argv[1]))){ <br>

perror(argv[1]; <br>

exit(3); <br>

} <br>

bzero(&server,sizeof(server)); //先将服务器地址清0 <br>

server.sinfamily=AF-INET; <br>

//internet域 <br>

//将取到的主机地址填入服务器的地址 <br>

bcopy(h->h-addr,&server.sinaddr,h->length); <br>

server.sinport=htons(1032); //填入公认的服务端口号与服 <br>

务进程建立连接 <br>

if(connect(sock,&server,sizeof(server))<0){ <br>

perror("connect"); <br>

exit(4); <br>

} <br>

//此时,连接已建立,可通过对套接字的读/写实现通信 <br>

myseq=0; <br>

while(read(sock,&recvseq,4)==4){//读序列数 <br>

recvseq=ntohl(recvseq); <br>

//网络字节顺序转换为主机字节顺序 <br>

if(myseq!=recvseq){ <br>

printf("sented=%d wanted=%d\n",recvseq,myseq); <br>



myseq=recvseq; <br>

} <br>

else <br>

myseq++; <br>

if(!(recvseq%50)) <br>

printf("."); <br>

if(!(recvseq%1000)) <br>

printf("\n"); <br>

} <br>

} <br>

  <br>

-- <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="18.htm">上一层</a>][<a href="40.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -