C++写的局域网聊天小程序,输入ip即可对话。
添加libwsock32.a库添加libws2_32.a能正常编译。
具体哪个忘记了。很多年前写的。用的是dev c++
没有界面。
//客户端
#include <iostream>
#include <Winsock2.h>
#include <Windows.h>
#include <process.h>
using namespace std;
SOCKET client;
void mythread(void * param)
{
char buffer;
while(1)
{
if( recv(client,buffer,sizeof(buffer),0) <= 0)
{
printf("对方已断开连接.....");
break;
}
cout << buffer <<endl;
}
}
int main(int argc, char *argv[])
{
WSADATA wData;
WSAStartup( MAKEWORD(2,2), &wData );
client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
char IP;
ADD:cout << "请输入服务器IP(如127.0.0.1)..." <<endl;
gets(IP);
sockaddr_in target;
target.sin_family = AF_INET;
target.sin_port = htons (8888);
target.sin_addr.s_addr = inet_addr (IP);
if ( (connect(client, (struct sockaddr*)&target, sizeof(target)) ) == SOCKET_ERROR)
{
printf( "连接服务器错误,请重新输入IP.\n" );
goto ADD;
}
cout << "已成功连接到"<< IP << "可以开始聊天了(*^__^*) "<<endl;
_beginthread(&mythread, 0, NULL);
char message;
while(1)
{
gets(message);
send(client,message,sizeof(message),0);
}
system("PAUSE");
return EXIT_SUCCESS;
}
//服务端
#include <iostream>
#include <Winsock2.h>
#include <Windows.h>
#include <process.h>
using namespace std;
SOCKET server, client;
void mythread(void * param)
{
char buffer;
while(1)
{
if( recv(client,buffer,sizeof(buffer),0)<=0 )
{
printf("对方已断开连接.....");
break;
}
cout << buffer <<endl;
}
}
int main(int argc, char *argv[])
{
WSADATA wData;
WSAStartup( MAKEWORD(2,2), &wData );
server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(8888);
localaddr.sin_addr.s_addr = INADDR_ANY;
bind(server, (struct sockaddr*)&localaddr, sizeof(sockaddr));
cout << "等待用户连接..." <<endl;
listen(server,1);
SOCKADDR_IN address;
int size = sizeof( SOCKADDR );
client = accept( server, NULL, NULL );
cout << "用户已连接,可以开始聊天了(*^__^*) ...." <<endl;
_beginthread(&mythread, 0, NULL);
char message;
while(1)
{
gets(message);
send(client,message,sizeof(message),0);
}
system("PAUSE");
return EXIT_SUCCESS;
}
MarioCrane 发表于 2020-2-24 21:18
你以为NAT穿透是那么简单的东西?
大哥你是迷还是我是迷, 这又跟NAT穿透有什么关系公网点对点 你还去考虑穿透不穿透呢 短小精悍,写出了socket通信的基本原理,作为教学例子很不错,
不过聊天程序还有很多工作要做,比如效验接收的数据,数据包中应该有效验码,数据加密与解密等等 谢谢分享 应该放张截图看看 能不能通过打开公网IP实现点对点通信呢?
看源代码好像是支持的 试试去,谢谢楼主 Serendipity_Cn 发表于 2020-2-23 15:44
能不能通过打开公网IP实现点对点通信呢?
看源代码好像是支持的
简单改一下就可以了 是不是跟飞秋原理一样的 支持原创 a865213 发表于 2020-2-23 16:01
简单改一下就可以了
这可不是简单改改就行的
页:
[1]
2