蔚蓝理想 发表于 2020-2-23 14:48

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;
}

Db2k 发表于 2020-2-27 09:44

MarioCrane 发表于 2020-2-24 21:18
你以为NAT穿透是那么简单的东西?

大哥你是迷还是我是迷, 这又跟NAT穿透有什么关系公网点对点 你还去考虑穿透不穿透呢

EnterpriseSolu 发表于 2020-2-23 16:14

短小精悍,写出了socket通信的基本原理,作为教学例子很不错,
不过聊天程序还有很多工作要做,比如效验接收的数据,数据包中应该有效验码,数据加密与解密等等

一个逗比的NPC 发表于 2020-2-23 15:40

谢谢分享

枫叶水客 发表于 2020-2-23 15:42

应该放张截图看看

Serendipity_Cn 发表于 2020-2-23 15:44

能不能通过打开公网IP实现点对点通信呢?
看源代码好像是支持的

深呼吸9188 发表于 2020-2-23 16:01

试试去,谢谢楼主

Db2k 发表于 2020-2-23 16:01

Serendipity_Cn 发表于 2020-2-23 15:44
能不能通过打开公网IP实现点对点通信呢?
看源代码好像是支持的

简单改一下就可以了

hu16725434 发表于 2020-2-23 16:20

是不是跟飞秋原理一样的

NvidiaChina 发表于 2020-2-23 16:22

支持原创

MarioCrane 发表于 2020-2-23 18:19

a865213 发表于 2020-2-23 16:01
简单改一下就可以了

这可不是简单改改就行的
页: [1] 2
查看完整版本: C++写的局域网聊天小程序,输入ip即可对话。