吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3629|回复: 14
收起左侧

[C&C++ 原创] C++写的局域网聊天小程序,输入ip即可对话。

[复制链接]
蔚蓝理想 发表于 2020-2-23 14:48
添加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[255];
     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[15];
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[255];
   
    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[255];
     
     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[255];
   while(1)
    {     
     gets(message);
     send(client,message,sizeof(message),0);
    }
   system("PAUSE");
   return EXIT_SUCCESS;
}

免费评分

参与人数 1吾爱币 +1 收起 理由
知意执意 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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
简单改一下就可以了

这可不是简单改改就行的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 08:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表