今天开始学习Linux的C++网络编程。
以前也用过一点socket,但是没有总结过,今天重新复习,然后总结之。
首先介绍一些数据类型:
sockaddr_in
sockaddr_un
sockaddr
这些结构体的定义虽然看起来不同,但是长度是相同的,而且对于处理而言,sockaddr_in显得最为方便,但是为了兼容链接,bind等函数的接口,需要做一个安全的强制类型转换 :
(struct sockaddr*)&some_sockaddr_in_definition
剩下一个要点就是理解网络连接的基本过程:
对于服务器端,首先创建socket,然后填写socketaddr_in的内容,这里需要注意的是sin_port的填写需要通过htons()函数对port进行转换。
//htons函数将一个16位数从主机字节顺序转换成网络字节顺序
1 bind()绑定端口
2 listen()
3 accept()等待client的连接
4 解析用户的数据
5 send()发送给用户数据
循环执行3-5
代码如下:
对于客户端来说,情况要更简单一些:
1 构造socket,socketaddr_in,这些是和server相同的,不同的是需要构造一个hostent类型的数据
该实体的构造可以调用函数gethostbyname()(或者为gethostbyaddr())函数来实现。
2 connect()
3 sent()
4 recv()