windows下的socket网络编程(入门级)
已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先写了个简单的winSocket网路通信的例子,以便以后用到的时候有个参考。
windows下使用winsock编程与linux/unix的区别在于windows下需要先有一个初始化的操作,结束的时候需要一个清理的操作。还有windows下编译的时候需要连接ws32_lib库。
大致过程如下
-
1、初始化
/*加载Winsock DLL*/WSADATA wsd;if (WSAStartup(MAKEWORD(2 , 2) , &wsd) != 0) {printf("Winsock 初始化失败!\n");return 1;} -
2、socket相关函数调用
socket(...)bind(...)listen(...)connect(...)accept(...)send/sendtorecv/recvfrom -
3、清理
WSACleanup();
clinet.c 客户端
客户端的流程很简单。
- 1、先是使用
socket函数产生一个打开的socket文件描述符。 - 2、使用
connect函数去连接服务端 - 3、使用
read/recv等读文件函数从服务端接收数据,使用write/send等写文件的函数向服务端发送数据
上面是典型的TCP编程流程,如果是UDP的话不需要connect去连接服务端直接使用sendto函数来发送数据,使用recvfrom接收来自服务器的数据
server.c 服务器端
服务器端的流程比客户端稍微复杂一点
- 1、调用
socket打开一个socket句柄 - 2、调用
bind来绑定socket句柄到一个网口的某个端口 - 3、调用
listen来设置(启用)监听 - 4、调用
accept来等待客户端的连接
上面是典型的TCP编程流程,如果是UDP的,那么不需要3,4这两部,直接使用recvfrom来接收客户端发过来的数据即可。
UDP通信的实现
我这里没有写TCP的,因为都是局域网内,就简单的写了个。
这里是在虚拟机里面测试的截图,代码见最后。


浙公网安备 33010602011771号