首先给大家推荐一本学习网络编程的书,很经典的一本用C语言实现的网络编程书-----UNIX网络编程。
C/S模型的建立就是分两部分,一个是服务器端程序的建立,另一个就是客户端程序建立。下面就服务器和客户端建立流程进行详细的讲解。
服务器端建立流程:
1.调用函数socket(),指定通信协议类型,建立套接字。
2.调用函数bind(),将本地地址绑定一个固定端口和相关接口,在调用bind之前需要将服务器地址端口信息进行设置。
3.调用函数listen(),将服务器端设置成监听状态,监听socket()创建的套接字。
4.调用函数accept(),接受客户端连接请求。如果没有客户端请求将阻塞。
5.当有客户端请求时调用函数read(),write()等完成客户端请求数据或者信息的传递。
6.服务器端退出时调用函数close(),关闭创建的通信套接字,释放系统资源(套接字也就是文件句柄是有限的,使用完要关闭,养成良好的编码习惯非常重要)。
客户端建立流程:
1.调用函数socket(),指定通信协议类型,建立套接字。根服务器端第一步一样,需要建立文件句柄。
2.调用函数connect(),建立与服务器的连接。
3.连接上服务器后便可以调用读写函数read()和write()完成与服务器的通信了。
4.最后一步别忘记调用close()来关闭不使用的套接字句柄。
客户端不需要bind()函数绑定端口,客户端的端口号由系统自动分配。
以上就是网络编程中典型的服务器客户端的通信模式,感兴趣的小朋友们可以调试一下服务器程序,客户端程序自己动手试试。
/*sever.c*/
#include
#include
#include
#include
#include
#include
#include
#include
#define SERV_PORT 8800
void perr_exit(const char *str)
{ perror(str);exit(1);}
intmain(){intsfd = socket(AF_INET,SOCK_STREAM,),cfd;structsockaddr_in servaddr;structsockaddr_in client_addr;inti,len; socklen_t addr_len;//initbzero(&servaddr,sizeof(structsockaddr_in)); servaddr.sin_family = AF_INET;//htons htonl 都属于网络字节序转换servaddr.sin_port = htons(SERV_PORT);//INADDR_ANY表示任意都可连接(因为客户端不是来自同一个网络地址)servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//if(bind(sfd,(structsockaddr *)&servaddr,sizeof(servaddr))
return;}
领取专属 10元无门槛券
私享最新 技术干货