五、与阿里ECS服务器进行网络通信
- 开启端口号,详细操作请看视频
- 使用FlashFXP上传代码
- 使用putty远登陆ECS服务器,修改代码、编译、执行
六、基于UDP协议的C/S模型
头文件:#include <sys/types.h>
/ #include <sys/socket.h>
函数声明:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
功能:UDP协议专用的数据发送函数
sockfd:套接字描述符
buf:待发送的缓冲区首地址
len:待发送的数据字节数
flags:0阻塞,1不阻塞
dest_addr:目标计算机地址
addrlen:地址结构体的字节数
返回值:成功发送的字节数
头文件:#include <sys/types.h>
/ #include <sys/socket.h>
函数声明:ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
功能:UDP协议专用的数据接收函数
sockfd:套接字描述符
buf:数据存储位置
len:最大接收字节数
flags:0阻塞,1不阻塞
src_addr:获取发送者的地址
addrlen:设置地址结构体的字节数
返回值:成功接收的字节数
编程模型:
Server | Client |
---|---|
创建套接字(socket) | 创建套接字(socket) |
准备地址(本机地址sockaddr_in) | 准备地址(目标机地址sockaddr_in) |
绑定(bind(sockfd+addr)) | … |
接收请求(recvfrom) | 发送请求(sendto) |
响应请求(sendto) | 接收响应(recvfrom) |
关闭套接字(close) | 关闭套接字(close) |
注意:从服务器到客户端返回的路线是UDP协议自己设计的。
练习1:获取当前计算机的ip地址和子网掩码。
- system(“ifconfig > /tmp/ip.conf”);
练习2:根据当前ip地址和子网掩码,遍历出所有同一局域网内的ip地址。
作业1:指针银行升级为网络版。
作业2:实现网络聊天室。
作业3:网络传输文件。
七、windows下的网络的编程
- 一般的软件都Linux/UNIX系统作为服务器,而windows系统作为客户端,windows下的socket编程的接口与Linux的基本一致,函数都声明在winsock2.h头文件中。
函数声明:int WSAStartup(WORD,LPWSADATA);
功能:初始化网络库
WORD:设置网络库的版本
MAKEWORD(1,2):第一个是主版本号,第副版本号
LPWSADATA:WSADATA数据结构的指针,用来获取网络的相关信息
函数声明:SOCKET socket(int domain, int type, int protocol);
功能:创建socket
返回值:typedef u_int SOCKET;
函数声明:closesocket(sockfd);
功能:关闭socket
函数声明int WSACleanup(void);
功能:卸载网络库
注意:编译时添加 -lws2_32,编译结果是a.exe
练习1:实现windows下的TCP的C/S通信。
练习2:实现windows下的UDP的C/S通信。