这里是一位初学 Windows Socket 网络编程的小白。
这里有两份源代码,一份是服务端的,一份是客户端的。
//Serve.cpp
//代码网上找的,dev-c++ 运行可以通过
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<cstring>
#include<WinSock2.h>
//链接ws2_32_lib库文件到此项目中
#pragma comment(lib,"ws2_32.lib")
using namespace std;
//===============全局变量===================
//设置缓冲区
const int BUF_SIZE = 2048;
SOCKET sockSer, sockCli;
SOCKADDR_IN addrSer, addrCli;
int naddr = sizeof(SOCKADDR_IN);
char sendbuf[BUF_SIZE];
char recvbuf[BUF_SIZE];
//===============函数声明===================
int main()
{
cout << "service starting..." << endl;
//加载socket库
WSADATA wsadata;
if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
{
cout << "Load socket database faild." << endl;
system("pause");
return 0;
}
else
{
cout << "Load socket database success." << endl;
}
//创建socket套接字
sockSer = socket(AF_INET, SOCK_STREAM, 0);
//描述协议族,INET属于ipv4
//SOCK_STREAM创建套接字类型:tcp
//SOCK_DGRAM创建套接字类型:udp
//0不指定协议,常用的就是tcp,udp
//初始化地址包
addrSer.sin_addr.s_addr = inet_addr("192.168.1.103");
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(1111);
//分配IP地址与端口号--绑定
bind(sockSer, (SOCKADDR*)&addrSer, sizeof(SOCKADDR));
//强制将SOCKADDR_IN转化为SOCKADDR
//监听可接收请求状态
while (true)
{
cout << "connect starting.." << endl;
//监听连接请求
cout<<"COME3\n";
listen(sockSer, 5);
//等待连接最大数:5
cout<<"COME1\n";
//接收连接
sockCli = accept(sockSer, (SOCKADDR*)&addrCli, &naddr);
cout<<"COME2\n";
if (sockCli != INVALID_SOCKET)
{
while (true)
{
cout << "connect success!" << endl;
cout << "sending$:" ;
cin >> sendbuf;
//向客户端发送信息
send(sockCli, sendbuf, sizeof(sendbuf), 0);
//接收客户端信息
recv(sockCli, recvbuf, sizeof(recvbuf), 0);
cout << "receviced: " << recvbuf << endl;
system("pause");
}
}
else
{
cout << "connect faild!!" << endl;
}
}
closesocket(sockSer);
closesocket(sockCli);
system("pause");
return 0;
}
//Client.cpp
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<cstring>
#include<WinSock2.h>
//链接ws2_32_lib库文件到此项目中
#pragma comment(lib,"ws2_32.lib")
using namespace std;
//===============全局变量===================
//设置缓冲区
const int BUF_SIZE = 2048;
SOCKET sockSer, sockCli;
SOCKADDR_IN addrSer, addrCli;
int naddr = sizeof(SOCKADDR_IN);
char sendbuf[BUF_SIZE];
char recvbuf[BUF_SIZE];
//===============函数声明===================
int main()
{
cout << "client starting..." << endl;
//加载socket库
WSADATA wsadata;
if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
{
cout << "Load socket database faild." << endl;
system("pause");
return 0;
}
else
{
cout << "Load socket database success." << endl;
}
//创建socket套接字
sockCli = socket(AF_INET, SOCK_STREAM, 0);
//描述协议族,INET属于ipv4
//SOCK_STREAM创建套接字类型:tcp
//SOCK_DGRAM创建套接字类型:udp
//0不指定协议,常用的就是tcp,udp
//初始化客户端地址包
addrCli.sin_addr.s_addr = inet_addr("127.0.0.1");
addrCli.sin_family = AF_INET;
addrCli.sin_port = htons(1111);
//初始化服务器地址
addrSer.sin_addr.s_addr = inet_addr("192.168.1.103");
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(1111);
while (true)
{
if (connect(sockCli, (SOCKADDR*)&addrSer, sizeof(addrSer) )!= SOCKET_ERROR);
{
while (true)
{
cout << "connect success!" << endl;
recv(sockCli, recvbuf, sizeof(recvbuf), 0);
cout << "receviced: " << recvbuf << endl;
cout << "sending$:" ;
cin >> sendbuf;
//向客户端发送信息
send(sockCli, sendbuf, sizeof(sendbuf), 0);
cout << "send success!" << endl;
system("pause");
}
}
cout << "send faild!" << endl;
}
closesocket(sockSer);
closesocket(sockCli);
system("pause");
return 0;
}
现在它们生成的 Serve.exe 和 Client.exe 可以实现在局域网里相互通信。
请问如何让它们实现跨网断通信呢?希望具体的教程视频/博客/文章。
好回答者直接关注 QwQ