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

学完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模块来实现远距离通信,相信你的逼格顿时提升的就不止一点点了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++重载++运算符_C ++运算符重载| 查找输出程序| 套装3

c重载运算符Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Test {public:int A;Test(){A 0;}Test(int a){A a;}void print(){cout << A << " ";}};Test operator*(Test T1, Test T2){Test temp;temp.A T1.A * T…

将数据库表导入到solr索引

将数据库表导入到solr索引 编辑solrcofnig.xml添加处理器 <requestHandler name"/dataimport" class"org.apache.solr.handler.dataimport.DataImportHandler"><lst name"defaults"><str name"config">data-config…

第 1-4 课:Java 中的运算符和流程控制 + 面试题

算术运算符 Java 中的算法运算符,包括以下几种: 算术运算符名称举例+加法1+2=3-减法2-1=1*乘法2*3=6/除法24/8=3%求余24%7=3++自增1int i=1;i++--自减1int i=1;i--我们本文要重点讲的是 “++” 和 “--”,其他的算术运算符相对比较简单直观,本文就不花精力去讲解了,之所以…

p标题/p能设置字体的大小和颜色

添加style <p style"color:red;font-size:16px;">标题</p>方法2&#xff1a;引入CSS<style type"text/css">.title{color:red;font-size:16px;}</style><body><p class"title">标题</p></body>…

scala中创建时间序列_如何从Scala中的序列中提取唯一元素?

scala中创建时间序列While storing data elements to a data structure or extracting raw data duplicate data might be included and this data decreases the efficiency of the code. So, eliminating duplicate data or extracting unique elements is important. 在将数…

获取u盘文件

功能&#xff1a;开机自启动&#xff0c;无dos窗口弹出&#xff0c;复制速度较快 缺点&#xff1a;面对杀软很无奈 #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )//屏蔽dos窗口 #include <stdio.h> #include <stdlib.h> #inc…

php中socket的使用

一、开启socket phpinfo();查看是否开启了socket扩展&#xff0c;否则在php.ini中开启。 二、服务器端代码的写法 <?php error_reporting(E_ALL); set_time_limit(0); //ob_implicit_flush();$address 127.0.0.1; $port 10005; //创建端口 if( ($sock socket_create(AF_…

第 1-3 课:深入理解字符串 + 面试题

字符串介绍 字符串是程序开发当中,使用最频繁的类型之一,有着与基础类型相同的地位,甚至在 JVM(Java 虚拟机)编译的时候会对字符串做特殊的处理,比如拼加操作可能会被 JVM 直接合成为一个最终的字符串,从而到达高效运行的目的。 1 String 特性 String 是标准的不可变类…

清空session的方法

清空session的方法&#xff0c;常用来注销的时候清空所有的session. 方法一&#xff1a; Enumeration esession.getAttributeNames(); while(e.hasMoreElements()){ String sessionName(String)e.nextElement(); System.out.println("存在的session有&#xff1a;"…

输入输出数组元素的函数重载_C ++函数重载| 查找输出程序| 套装3

输入输出数组元素的函数重载Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Test {public:void fun(){cout << "Fun() called" << endl;}void fun(int num){cout << num << endl;}};int main(){Test T;…

通过xss所引起的信息泄露,防不胜防!

话不多说直接上&#xff1a; 信息搜集,通过google语法 site:"*.redacted.com"优化一下: site:"*.redacted.com" -www -blog -mail之后&#xff0c;利用subfinder、assetfinder和masass等被动枚举工具收集与目标相关的子域列表&#xff0c;并将它们保存在…

二叉树的前序、中序、后续、层序遍历(包含递归与非递归)

递归形式 递归形式遍历比较简单&#xff0c;不做详细论述。 前序遍历 void Preorder(treenode* root) //前序 {if (root ! NULL){printf("%c", root->data);Preorder(root->left);Preorder(root->right);}中序遍历 } void Inorder(treenode* root) …

第 1-6 课:玩转时间 + 面试题

在 JDK 8 之前,Java 语言为我们提供了两个类用于操作时间,它们分别是:java.util.Date 和 java.util.Calendar,但在 JDK 8 的时候为了解决旧时间操作类的一些缺陷,提供了几个新的类,用于操作时间和人气,它们分别是:LocalTime、LocalDateTime、Instant,都位于 java.time…

单调递增子序列

单调子序列包含有单调递增子序列和递减子序列&#xff0c;不失一般性&#xff0c;这里只讨论单调递增子序列。首先&#xff0c;从定义上明确我们的问题。给定序列a1, a2, …, an&#xff0c;如果存在满足下列条件的子序列 ai1<ai2<…<aim, (其中i1<i2<…<im)…

HTML文本框内容发生变化时引发事件执行

最近在做的程序中需要这样的一个功能:当HTML文本框内容生发变化时执行JavaScript函数.最初的想法是使用onchange,但这个事件只有当文本框失去焦点时才会触发,后来就找到了onpropertychange事件.如下:<input id"textRoad" type"text" size"15"…

第 1-5 课:深入了解 Java 中的异常处理 + 面试题

在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点。比如,try-catch 处理要遵循的原则是什么,finally 为什么总是能执行,try-catch 为什么比较消耗程序的执行性能等问题,我们本篇内容都会给出相应的答案,当然还有面试中经常被问到…

java math 类_Java Math类静态双层(double d)示例

java math 类数学班静态双层(双D) (Math Class static double floor(double d)) This method is available in java.lang package. 此方法在java.lang包中可用。 In this method if the value of the given positive argument after decimal point is 0 or greater than 0 so i…

在win server 2003上安装SQL Server 2008的步骤

1.安装Microsoft .NET Framework 3.5 Service Pack 1&#xff0c;下载地址&#xff1a;http://www.microsoft.com/zh-cn/download/confirmation.aspx?id22 2.运行SQL Server 2008安装包&#xff0c;安装过程中会提示需要重启&#xff0c;手动重启。 3.重启后若直接再次运行SQL…

使用onclick跳转到其他页面/跳转到指定url

如果是本页显示可以直接用location,方法如下&#xff1a;①οnclick"javascript:window.location.hrefURL"②οnclick"locationURL"③οnclick"window.location.hrefURL?id11"如果页面中有frame可以将在location前面添加top.mainframe.frames[r…

第 2-1 课:类与 Object + 面试题

类介绍 Java 程序是由若干个类组成的,类也是面向对象编程思想的具体实现。 以下为类的基本使用: public class Cat {// 私有属性private String name;private int age;// 构造方法public Cat() {}// 普通方法public void eat() {System.out.println("吃吃吃");}…