1 需求描述:
(1)Linux下编写。
(2)创建一个服务器、若干个客户端。
(3)用户可以通过客户端输入文字向服务器发送消息。
(4)服务器端接收到客户端发送的数据,将用户输入的内容在服务器上打印出来,并原样返回。
2 相关基础
2.1 套接字Socket通信编程
2.1.1 TCP/IP通信过程:
图2.1.1 TCP/IP通信过程
2.1.2 UDP通信过程:
图2.1.2 UDP通信过程
2.2 fork多进程编程
fork,在英语中意思是分叉的意思。Linux函数fork(void)被定义在#include中,调用成功时,返回两个值,子进程返回0,父进程返回子进程的ID,出错返回-1。子进程是父进程的副本,它将获得父进程的数据空间、堆、栈等资源的副本并且拥有自己独立的地址空间。
以下是一个fork的简单例子。
#include
#include
#include
int main(int argc, char ** argv )
{
int pid = fork();
if (-1 == pid)
{
printf("error!"); //出错
}
else if(0 == pid )
{
printf("This is the child process!"); //子进程
}
else
{
printf("This is the parent process! child process id = %d", pid); //父进程,返回的是子进程的ID
}
return 0;
}
3 设计
3.1 框架设计
图3.1 框架设计
3.2 代码设计
套接口的通信一般使用read( )和write( )。这里使用send( )和recv( ),因为这一对函数可以更好地控制数据传