学完socket编成后,就迫不及待地写一个简单的聊天程序,好在同学面前装装逼,毕竟外行看热闹。然而在自己的电脑上运行是毫无差错,发送接收都没有问题,然而将客户端的exe文件打包后发送给其他电脑上运行时程序死在了connect函数上,始终无法连接到服务器,相信小白都有过这样的经历,为之气愤不已,我也很气愤。为什么连接不上呢?

电脑的网络是通过连在路由器上实现上网的,一个路由器的覆盖范围小,也就是说一个路由器就是一个局域网,连接在不同路由器上的电脑是无法用socket直接进行通信的,一些牛逼的大佬说用打洞的技术可以实现通信,毕竟人家是大佬,咱们也只能说声大佬牛逼之外还能说啥。废话不都说,到底怎样才能实现真正的聊天功能,我们需要连接到公网IP上就能实现通信。首先申请一个云服务器(先声明一下,不是打广告,不是打广告),阿里云或者腾讯云都可以,学生申请很便宜,一个月10块钱左右,申请到服务器后会给你一个公网IP和私有IP,使用这个公网IP。申请学生阿里云服务器请点击

当申请到这个服务器后该如何运行我们自己写的程序呢?这时就需要 xshell这个工具了,xshell可以远程操作服务器,也可以操作虚拟机中的linux系统,操作方法和在本机操作一样,都是用linux指令。怎么连就不说了,网上教程应有尽有。怎样才能将写好的程序上传到服务器运行呢,连接上与服务器后,输入 yum -y install lrzsz指令安装一个插件,安装完毕后,输入 rz 指令便可将指定的文件上传到当前路径下,输入 sz+文件名 便可将服务器上的文件下载到本机上。将源文件上传成功后,编译后运行起来即可。

在客户端中,sockaddr_in结构体中的IP就填云服务器的公网IP,在确保电脑连网的状态下启动客户端,便可连接云服务器,只要有网络,不管你在哪都能实现通信。

如果你还是一个单片机爱好者,有了云服务器你可以使用ESP8266、4G通信模块、GPRS模块来实现远距离通信,相信你的逼格顿时提升的就不止一点点了。

网络编程C/S模型怎样才能实现真正的聊天功能相关推荐

  1. Java网络编程案例--CS模型的简单实现

    Java网络编程案例–CS模型的简单实现 Java网络编程案例CS模型的简单实现 基本概述 程序原理图 源代码 基本概述 该程序采用C/S模型,在服务器端简单的建立了一个多线程类,来实现对多个客户端传 ...

  2. 网络编程I/O模型分析

    网络编程I/O模型分析 1.阻塞I/O.非阻塞I/O模型 阻塞IO模型 非阻塞型 2.I/O复用模型 slecet() pool() epool() ==结构体== ==epoll_create()= ...

  3. TCP网络编程----C/S模型 (客户端/服务器模型)的代码实现

    TCP网络编程----C/S模型 (客户端/服务器模型)的代码实现 client发送数据到server,server对数据进行提取并根据用户输入的操作符进行两个数的计算,并将计算结果传给client. ...

  4. linux服务器网络编程之线程模型

    前言   本文将主要介绍传统的和目前流行的进程/线程模型,在讲进程/线程模型之前需要先介绍一种设计模式: Reactor 模式.Reactor 模式首先是事件驱动的,有一个或多个并发输入源,有一个Se ...

  5. Linux后端服务器网络编程之线程模型丨reactor模型详解

    前言   上一篇文章<后端服务器网络编程之 IO 模型>中讲到服务器端高性能网络编程的核心在于架构,而架构的核心在于进程/线程模型的选择.本文将主要介绍传统的和目前流行的进程/线程模型,在 ...

  6. Windows下网络编程及多线程模型

    Socket编程 要想客户端和服务器能在网络中通信,那必须得使用 Socket 编程. 服务端首先调用 socket() 函数,创建网络协议为 IPv4,以及传输协议为 TCP 的 Socket ,接 ...

  7. java 网络编程 聊天_Java——网络编程(实现基于命令行的多人聊天室)

    目录: 1.ISO和TCP/IP分层模型 2.IP协议 3.TCP/UDP协议 4.基于TCP的网络编程 5.基于UDP的网络编程 6.基于TCP的多线程的聊天室的实现 1.ISO和TCP/IP分层模 ...

  8. Java——网络编程(实现基于命令行的多人聊天室)

    2019独角兽企业重金招聘Python工程师标准>>> 目录: 1.ISO和TCP/IP分层模型 2.IP协议 3.TCP/UDP协议 4.基于TCP的网络编程 5.基于UDP的网络 ...

  9. Python网络编程(OSI模型、网络协议、TCP)

    前言: 什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系. 在数学上,网络是一种图,一般认为专指加权图. 网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类 型的实际问题中抽象 ...

最新文章

  1. 编码/解码和进制转化工具hURL
  2. Python 中关于 round 函数的小坑
  3. unity随笔(1)-材质、对象
  4. 使用JPA和@NamedQueries的Spring数据
  5. ajax工作中使用模板
  6. 【2017年第2期】专题:大数据管理与分析
  7. console vue 打包之后怎么去掉_Vue Cli 3 打包配置--自动忽略 console.log 语句
  8. axios的介绍与页面配置---axios工作笔记003
  9. Redis服务器被劫持风波
  10. VMvare虚拟机如何删除安装的ubuntu操作系统
  11. win_server_2012离线安装.net3.5教程
  12. JAVA视频全套在线学习
  13. C++ ——Qt的信号和槽的详解
  14. CAD2019安装方法及步骤
  15. SECS半导体通信委员会参考书
  16. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
  17. 2022-2023上学期 奖状的清单
  18. 【Multisim仿真】NE555电路三角波、方波、正弦波发生器
  19. 最大熵模型(MaxEnt)解析
  20. word转图片,pdf转图片,doc转图片,docx转图片

热门文章

  1. HttpServletResponse应用 的 简单介绍
  2. 什么是分布式系统的CAP理论?
  3. Promise进阶——如何实现一个Promise库
  4. Linux/Unix 新手和专家教程
  5. 使用T-SQL语句操作数据表-删除数据
  6. 备忘(持续更新。。。)
  7. ffmpeg 纯静态编译,以及添加自定义库流程摘要
  8. win2003 sp2+iis 6.0上部署.net 2.0和.net 4.0网站的方法
  9. Sphinx+MySQL5.1x+SphinxSE+mmseg
  10. linux内核笔记-内核同步