本次作业主要是使用自己熟悉的语言完成一个简单的socket编程,并对比该语言的socket api和linux api之间的异同。因此我将先附上socket程序的代码,并分析socket api,与linux api加以比较
我使用的是winsock,C++语言,基于流套接字(TCP)。
server端:
#include <iostream> #include<string> #include <winsock2.h> #include <winsock.h> #include<string> #include<thread> #pragma comment(lib,"WS2_32.lib") using namespace std; static WSADATA wsaData; //wsadata结构包含有关windows套接字实现的信息 static SOCKET serversocket; //服务器socket static SOCKET clientsocket; //客户端socket static sockaddr_in sockin; //保存地址信息 int len = sizeof(SOCKADDR); //地址长度 char text[100]; //接收消息缓冲区 struct sockaddr_in sa; //客户端地址信息 int len_new = sizeof(sa); //地址长度 //创建并初始化套接字,包括填充地址信息 void init() { WORD sockVersion = MAKEWORD(2, 0); // 版本2.2 ::WSAStartup(sockVersion, &wsaData); //对winsock服务初始化 serversocket = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //创建套接字 //填充sockaddr_in结构 sockin.sin_family = AF_INET; //指定ipv4 sockin.sin_port = htons(7777); //绑定到7777端口;htons将端口号由主机字节序转换为网络字节序的整数值(host to net) sockin.sin_addr.S_un.S_addr = INADDR_ANY; //本地所有地址 } //清空缓冲区 void cleartext() { for (int i = 0; i < 100; i++) { text[i] = '