#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
void ErrorHandler(char *message);
int main(int argc, char *argv[])
WSADATA wsaData;
SOCKET hServSock, hClntSock;
SOCKADDR_IN servAddr, clntAddr;
int szClntAddr;
char message[] = "Hello, world!";
if(argc != 2)
printf ("Usage: %s <port>\n", argv[0]);
exit(1);
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
ErrorHandler("WSAStartup failed");
hServSock = socket(PF_INET, SOCK_STREAM, 0);
if(hServSock == INVALID_SOCKET)
ErrorHandler("socket error");
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(atoi(argv[1]));
if(bind(hServSock, (SOCKADDR *)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
ErrorHandler("bind socket error");
if(listen(hServSock, 5) == SOCKET_ERROR)
ErrorHandler("listen socket error");
szClntAddr = sizeof(clntAddr);
hClntSock = accept(hServSock, (SOCKADDR *)&clntAddr, &szClntAddr);
if(hClntSock == INVALID_SOCKET)
ErrorHandler("accept error");
send(hClntSock, message, sizeof(message), 0);
closesocket(hClntSock);
closesocket(hServSock);
WSACleanup();
return 0;
void ErrorHandler(char *message)
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
编译:菜单 Terminal > Run Build Task ,或者快捷键 Ctrl+Shift+B 。
运行:在终端
键入 .\hello_server_win.exe 1234
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
void ErrorHandler(char *message);
int main(int argc, char *argv[])
WSADATA wsaData;
SOCKET hClntSock;
SOCKADDR_IN servAddr;
char message[30];
int strLen;
if(argc != 3)
printf ("Usage: %s <IP> <port>\n", argv[0]);
exit(1);
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
ErrorHandler("WSAStartup failed");
hClntSock = socket(PF_INET, SOCK_STREAM, 0);
if(hClntSock == INVALID_SOCKET)
ErrorHandler("socket error");
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(argv[1]);
servAddr.sin_port = htons(atoi(argv[2]));
if(connect(hClntSock, (SOCKADDR *)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
ErrorHandler("connect socket error");
strLen = recv(hClntSock, message, sizeof(message)-1, 0);
if(strLen == EOF)
ErrorHandler("read() error!");
printf("Message from server: %s \n", message);
closesocket(hClntSock);
WSACleanup();
return 0;
void ErrorHandler(char *message)
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
编译:菜单 Terminal > Run Build Task ,或者快捷键 Ctrl+Shift+B 。
运行:在终端
键入 .\hello_client_win.exe 127.0.0.1 1234
socket网络编程–serve的搭建
1.首先,我们要知道socket服务端搭建的大致步骤,从开始的创建套接字到数据交互都有对应的API供我们使用,在我们创建好大致框架后,首先做的是用man手册查看相应的API使用规则(在Linux终端输入man 2 socket),之后出现类似界面
可以看到API所对应的头文件,socket函数返回的是一个整型变量,我在这里定义了一个s_fd整型变量来判断返回值,并用perror函数来鉴别报错的原因和退出程序。
这里的参数AF_INET代表地址家族IPV4(因特
文章目录简介服务器网络版本1、打开网络库2、校验版本3、创建socket4、绑定地址和端口5、监听6、接受链接7、与客户端收发消息客户端1、打开网络库2、校验版本3、创建socket4、连接服务器5、与客户端收发消息类比运行结果源码链接遇到的问题头文件冲突
socket又是什么?
将网络底层复杂的协议体系,执行流程,进行了封装后就是SOCKET了,也就是说,SOCKET是我们调用协议进行通信的操作接口,将复杂的协议过程与我们编程人员分开,我们直接操作一个简单SOCKET就行了,对于底层的协议 过程细节
需要引入的头文件,和必要宏定义#define WIN32_LEAN_AND_MEAN //避免引用会产生冲突的依赖库(windows.h包含有WinSock2.h的一些宏定义,防止产生重定义错误!)
#include <windows.h> //windows系统API头文件
#include <WinSock2.h>