想要实现网上聊天,就必须先了解网络通信。像平时我们遵守的法制法规,网络通信也有网络协议。网络协议是计算机在网络中实现通信时必须遵守的约定,也就是通信协议。主要是对信息传输的速率、传输代码、代码结构、传输控制步骤、出错控制等作出规定并制定出标准。只有相同网络协议的计算机才能进行信息的沟通与交流。
最常见而且应用最广的协议,应该就是TCP/IP了。它同时具备了可扩展性和可靠性的需求,只是牺牲了速度和效率。想要聊天,就要先知道双方的IP地址,然后按照协议互相传输信息。再引入一个套接字的概念吧,他是支持TCP/IP的网络通信的基本操作单元,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
ServerSocket ss=new ServerSocket(port); System.out.println("成功监听端口"+port); //调用接收方法,等待他人进行访问;返回一个socket Socket socket=ss.accept(); System.out.println("访问成功");
这里就是创建服务器的套接字,可以理解成你给自己服务器端口开了一扇门,然后安排了一个人接待他人的访问。
接下来就是获得信息的输入输出流,实现信息的双向传输。
//获得端口的输入输出流 InputStream input=socket.getInputStream(); OutputStream output=socket.getOutputStream(); String str="吃饭了吗"; output.write(str.getBytes("GBK")); while(true) { // int n=input.read(); // System.out.println((char)n); String mst=ReadStr(input); System.out.println(mst); }
因为我们聊天主要是通过汉字,所以这里要弄一个读取字符串的方法
//读取字符串的方法 public String ReadStr(InputStream input) throws IOException { /*ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组 的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例 向数组中写入或读出byte型数据。在网络传输中可以利用ByteArrayOutputStream把 所有的变量收集到一起,然后一次性把数据发送出去。*/ ByteArrayOutputStream bos=new ByteArrayOutputStream(); while(true) { int n=input.read(); //判断当按下回车键时,停止向bos中存入字节。 if(n=='\r') { continue; } if(n=='\n') { break; } bos.write(n); } //创建一个字节数组,将之前程序内部创建的字节型数组缓存区所存的字节统统移给新数组 byte[]bytes=bos.toByteArray(); //创建字符串变量,把所有字节合在一起 String str=new String(bytes,"GBK"); return str; }
最后,在搜索中输入cmd,然后输入telnet +端口号,就能实现和其他计算机之间的简单聊天了,不过只能在黑框框里面,感觉还是木有意思呀,所以接下来就是要弄一个聊天窗口等其他事情了。
相关推荐
一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...
一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让知识环环相扣,降低了学习的难度 通过大量的比喻、类比、对比和图示等多种讲解方式,学习效果好 对Java语言的每个语法都提供了一个或多个例程讲解 ...
该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...
python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和...
独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、...
独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、...
独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序...
独立打包,保证可解压,内含大量源码,网上搜集而来。一共10几包,每个包几十兆。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序...
独立打包,保证可解压,内含大量源码,网上搜集而来。 Visual.C++编程技巧精选500例源代码 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、...
一个简单的客户端程序,支持基于课程定义的协议的对等连接和通信,以及Python支持的朴素GUI。 先决条件 目前,该程序仅在使用Python 3.5.2的Ubuntu 1604上进行过测试 入门 安装python虚拟环境 pip3 install ...
简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 ...
简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 ...
Hicore是一个免费的开源游戏服务器。 它基于RUDP协议,适用于快节奏游戏 :video_game: 。 该服务器包括两部分,一部分是由Nodejs开发的管理器作为Mothership Server,另一部分是由...入门最快,最简单的入门方法是使用D
第0章 JDK安装和最简单的环境变量配置方法 第1章 Java基础概念 一、 Java基础语法 1、Helloworld.java 2、标识符 3、关键字 4、常量 5、变量 6、语句 6.1 if语句和switch语句 6.1.2 if语句举例 6.1.3 switch语句 ...
最受欢迎的数据库服务器之一。 由MySQL的原始开发人员制作。 保证保持开源。 现代CSS框架,默认情况下支持桌面,平板电脑和移动设计。 -Node旨在构建可扩展的网络应用程序。 IO-Socket.IO支持基于双向事件的实时...
本demo是一个简单的IM程序,展示了Rapid引擎最基础的功能:信息类型定义、协议定义、信息发送与处理、信息同步调用、好友上下线通知、断线重连等。
乒乓球使用AR入侵Wantedly的乒乓球桌的项目入门克隆此存储库通过open of_v0.8.4_osx_release/apps/myApps/pinpong/pinpong.xcodeproj Xcode项目我希望您可以按开始按钮进行构建为简单起见,您不必下载存储库中已经...
Slack不仅是历史上发展最快的创业公司,而且同名的应用程序是当今使用的流行通信工具之一。 我们在MongoDB中广泛使用它,以促进团队之间以及整个公司之间的有效通信。 我们并不孤单。 似乎我遇到的每个开发人员也在...
本教程使用与SignalR入门教程相同的聊天应用程序代码,但演示如何将其添加到MVC 5应用程序。 在这个主题中,您将学习以下SignalR开发任务: 将SignalR库添加到MVC 5应用程序。 创建集线器和OWIN启动类来将内容推...