如何编写Linux下的客户机_服务器软件(3)
文章作者 100test 发表时间 2007:03:14 16:29:33
来源 100Test.Com百考试题网
简要说明:
当有客户机发出连接请求时,此函数初始化这个连接。正常调用返回与客户机通信的通信文件描述符,出错返回-1。参数s为socket调用返回的文件描述符,address将用来存储客户机的信息,此信息由accept填入,当与客户机连接时,客户机的地址与端口将填到此处。address_len是客户机地址长度的字节数,也由accept填入。
(5)connect
调用方式:
#include
#include
int connect(int s,struct sockaddr *address,size_t address_len). |
简要说明:
客户机调用socket建立传输端口后,调用connect来建立与远程服务器相连的连接线路。
此函数的参数调用同bind。
(6)inet_addr
调用方式:
#include
#include
#include
in_addr_t inet_addr(const char *addstring). |
简要说明:
此函数将字符串addstring表示的网络地址(如192.168.0.1)转换成32位的网络字节序二进制值,若成功返回32位二进制的网络字节序地址,若出错返回 INADDR_NONE。INADDR_NONE是32位均为1的值(即255.255.255.255,它是Internet的有限广播地址),故如果要转换的addstring是255.255.255.255,函数调用将失败。
(7)fork
调用方式:
#include
#include
pid_t fork(void). |
简要说明:
fork的作用是拷贝父进程的内存映象来创建子进程,两个进程将接着fork后的指令继续执行。 事实上它返回两个进程控制号,对于父进程它返回子进程的进程ID,对于子进程它返回0。
可用下边的代码调用fork:
pid_t childpid.
if((childpid=fork())=-1){
perror("The fork failed").
exit(1).
}
else if(child==0){
调用子进程.
}
else if(child>0){
调用父进程.
} |
以上介绍了网络编程的有关库函数的调用方法,下面举一个客户机/服务器程序的小例子具体说明如何设计网络程序。本例介绍如何查看服务器上的时间和日期,由于daytime服务器的通用端口为13,客户机程序将通过调用13号端口对服务器上的时间和日期进行操作。
/*timeserve.c*/
/*服务器程序伪代码如下:
打开daytime监听端口;
while(客户机与服务器成功连接——成功返回通信文件描述符)
{
fork()
子进程:
{
读出当前时间;
将当前时间写入通信文件描述符;
关闭通信文件描述符;
}
父进程:
关闭通信文件描述符;
}
*/ |