初始化动态库
SocketInit socketInit;
服务端
创建监听套接字
SOCKET sListen=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
if (sListen == SOCKET_ERROR)
{
printf("监听套接字创建失败\n");
return -1;
}
绑定套接字
sockaddr_in sock_in;
sock_in.sin_family = AF_INET;
sock_in.sin_port = htons(12306);
sock_in.sin_addr.S_un.S_addr = INADDR_ANY;//INADDR_ANY(获取本机地址)
//绑定套接字
int ret=bind(sListen, (const sockaddr*)&sock_in, sizeof(sock_in));
//判断绑定套接字是否成功
if (ret == SOCKET_ERROR)
{
printf("绑定套接字失败\n");
closesocket(sListen);
}
else printf("绑定套接字成功\n");
监听
if (listen(sListen, 10) == SOCKET_ERROR)
{
printf("监听失败\n");
closesocket(sListen);
return -1;
}
else printf("监听成功\n");
接收客户端的连接
sockaddr_in clientAddr;
int nlen = sizeof(sockaddr_in);
SOCKET sClient=accept(sListen, (sockaddr*)&clientAddr, &nlen);
if (sClient == SOCKET_ERROR)
{
printf("接收失败\n");
closesocket(sListen);
return -1;
}
printf("与客户端建立连接...\n");
接收数据
while (1) {
char buff[1024];
memset(buff, 0, sizeof(buff));//清空数组
int ret = recv(sClient, buff, 1024, 0);
if (ret > 0)
{
//printf("接收到的数据:%s\n", buff);
cout << "客户端:" << buff << endl;
}
else {
printf("客户端断开连接\n");
break;
}
memset(buff, 0, sizeof(buff));//清空数组
cout << "<";
cin.getline(buff, sizeof(buff));
//gets_s(buff, 1024);//输入要发送的内容
ret = send(sClient, buff, strlen(buff), 0);//发送数据
if (ret == -1) {
cout << "发送信息失败";
WSACleanup();
return -1;
}
}
回收资源
closesocket(sListen);
客户端
创建客户端套接字
SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == SOCKET_ERROR)
{
printf("客户端套接字创建失败\n");
return -1;
}
else printf("客户端套接字创建成功\n");
sockaddr_in sock_in;
sock_in.sin_family = AF_INET;
sock_in.sin_port = htons(12306);
sock_in.sin_addr.S_un.S_addr =inet_addr("169.254.250.0");//以本机地址做服务器地址
连接服务器
if (connect(sClient, (const sockaddr*)&sock_in, sizeof(sockaddr_in)) == SOCKET_ERROR) {
printf("服务器连接失败\n");
return -1;
}
else printf("连接服务器成功\n");
收发数据
while(1) {
//客户端发送消息
char buff[1024];
memset(buff, 0, sizeof(buff));
printf(">");
cin.getline(buff, sizeof(buff));//输入要发送的内容
send(sClient, buff, strlen(buff), 0);//发送数据
//客户端接收消息
memset(buff, 0, sizeof(buff));//清空数组
int ret = recv(sClient, buff, 1024, 0);
if (ret > 0)
{
cout << "服务端:" << buff << endl;
}
else {
printf("服务端断开连接\n");
break;
}
}
回收资源
closesocket(sClient);
动态库
#ifndef _SOCKET_INIT_H
#define _SOCKET_INIT_H
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
class SocketInit {
public:
SocketInit() {
WORD sockVersion = MAKEWORD(2, 2);
WSADATA wasData;
if (WSAStartup(sockVersion, &wasData) != 0) {
printf("动态库加载失败!\n");
}
else printf("动态库加载成功!\n");
}
~SocketInit() {
WSACleanup();
}
};
#endif