socket编程--非实时通信
只是实现简单的功能而已
效果图:
server.cpp
//服务器端
#include<iostream>
#include <WinSock2.h>
#include <stdio.h>
#include<string>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
void main()
{
WSADATA wsd;
SOCKET server; //服务器socket
SOCKADDR_IN addrSrv;
char sendBuf[100];
char recvBuf[100];
SOCKADDR_IN addrClient;
SOCKET client; //连接的客户端socket
int len;
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
printf("start up failed!\n");
return;
}
server = socket(AF_INET, SOCK_STREAM, 0); //创建socket
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //设置地址 INADDR_ANY转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP,因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思
addrSrv.sin_family = AF_INET; //ipv4
addrSrv.sin_port = htons(6000); //设置端口号
bind(server, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //绑定 实际编程中,sockaddr_in强制转换成sockaddr指针
listen(server, 5); //设置最多连接数
len = sizeof(SOCKADDR);
client = accept(server, (SOCKADDR*)&addrClient, &len); //接收客户端连接
string input;
while (1)
{
cout << "请输入" << endl;
cin >> input; //输入数据
const char* p = input.data(); //string强制转换成const char*
send(client, p, strlen(p) + 1, 0); //发送信息客户端
cout << "正在接收" << endl;
recv(client, recvBuf, 100, 0); //接收客户端数据
cout << recvBuf << endl; //输入数据
}
closesocket(client); //关闭连接,关闭套接字
WSACleanup(); //释放套接字资源
}
client.cpp
//客户端
#pragma warning(disable:4996)
#include<iostream>
#include <winsock2.h>
#include <stdio.h>
#include<string>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
void main()
{
WSADATA wsd;
SOCKET sockClient; //客户端socket
SOCKADDR_IN addrSrv;
char recvBuf[100];
char sendBuf[100];
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
printf("start up failed!\n");
return;
}
sockClient = socket(AF_INET, SOCK_STREAM, 0); //创建socket
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //连接服务器端
string input;
while (1)
{
cout << "正在接收" << endl;
recv(sockClient, recvBuf, 100, 0); //接收服务器端数据
cout << recvBuf << endl; //输出接收到的数据
cout << "请输入" << endl;
cin >> input; //输入数据
const char* p = input.data(); //string强制转换成const char*
send(sockClient, p, strlen(p) + 1, 0); //向服务器端发送数据
}
closesocket(sockClient); //关闭连接
WSACleanup(); //释放套接字资源
system("pause");
}