Socket实现简易聊天室,Client,Server
package seday08;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
/**
* @author xingsir
*简易聊天室客户端
*/
public class Client {
/*
* 套接字 java.net.Socket
* Socket封装了底层TCP协议的通讯细节,使用它可以通过
* TCP协议与服务端建立链接,并以两条流进行IO操作完成 与服务端的数据交换
*/
private Socket socket;//声明了一个 Socket类型的对象
//构造方法
public Client() {
try {
System.out.println("正在连接服务器。。。。。。");
socket =new Socket("localhost",33069);//端口范围0-65535
System.out.println("已成功连接服务端!");
} catch (Exception e) {
e.printStackTrace();//输出错误堆栈信息,有助于定位并解决错误
}
}
/*
* 客户端开始工作的方法
*/
public void start() {
try {
OutputStream out = socket.getOutputStream();//客户端的Socket对象上的getOutputStream方法得到的输出流其实就是发送给服务器端的数据。
OutputStreamWriter osw= new OutputStreamWriter(out);//字符转字节流
BufferedWriter bw=new BufferedWriter(osw);//缓冲流
PrintWriter pw =new PrintWriter(bw,true);//行更新
Scanner scanner=new Scanner(System.in);//控制台输入,获取键盘输入信息
while(true) {//条件为真
String message=scanner.nextLine();
pw.println(message);
}
} catch (Exception e) {
e.printStackTrace();//输出错误堆栈信息,有助于定位并解决错误
}
}
public static void main(String[] args) {
//实例化一个客户端
Client client = new Client();
//调用启动方法
client.start();
}
}
//===================================================================================
package seday08;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author xingsir
* 服务器端
*/
public class Server {
private ServerSocket server;//声明了一个ServerSocket类型的对象
//构造方法
public Server() {
try{
System.out.println("服务器正在启动。。。。。。");
server = new ServerSocket(33069);//接受的端口号
System.out.println("服务端启动完毕!");
}catch (IOException e) {
e.printStackTrace();//输出错误堆栈信息,有助于定位并解决错误
}
}
//服务端工作方法
public void start() {
try {
while(true) {
System.out.println("等待客户端连接。。。。。。");
Socket socket =server.accept();//accept():接受客户端的连接请求,并返回一个套接字
System.out.println("一个客户端链接了!");
/*
* Socket提供的方法:InputStream getInputStream()
* 通过Socket获取的输入流读取的字节是来自 远端计算机发送过来的字节。
*/
InputStream in = socket.getInputStream();
//将字节转换为字符
InputStreamReader isr= new InputStreamReader(in,"UTF-8");
BufferedReader br= new BufferedReader(isr);//块读,并且可以按行读取字符串
String message = null;//声明字符串message,初始化呢为空
/*
* 通过BufferedReader读取客户端发送过来的一行字符串这个操作中,当客户端断开连接时,
* 由于 客户端系统不同,服务端这里的表现也不相同:
* windows客户端断开时,readLine方法会直接抛出异常
* linux客户端断开连接时,readLine方法会返回 为null
*/
while((message = br.readLine())!=null) {
System.out.println("来自客户端的消息说:"+message);//控制台打印消息
}
}
} catch (Exception e) {
e.printStackTrace();//输出错误堆栈信息,有助于定位并解决错误
}
}
public static void main(String[] args) {
//实例化一个server端
Server server = new Server();
server.start();//调用方法
}
}
Socket实现简易聊天室,Client,Server的更多相关文章
- PHP 操作socket 实现简易聊天室
<?php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP ); socket_bind($socket ,'127.0.0.1', ...
- 示例:Socket应用之简易聊天室
在实际应用中,Server总是在指定的端口上监听是否有Client请求,一旦监听到Client请求,Server就会启动一个线程来响应该请求,而Server本身在启动完线程之后马上又进入监听状态. 示 ...
- Express+Socket.IO 实现简易聊天室
代码地址如下:http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: 首 ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- node+websocket创建简易聊天室
关于websocket的介绍太多,在这就不一一介绍了,本文主要实现通过websocket创建一个简易聊天室,就是90年代那种聊天室 服务端 1.安装ws模块,uuid模块,ws是websocket模块 ...
- Java实现简易聊天室
Java实现简易聊天室 在学习<Java从入门到精通>这本书,网络通信,基于TCP实现的简易聊天室,我这里对书中的代码略做了修改,做个记录. 这里先放一下运行效果图,代码放在最后. 运行效 ...
- socket 建立网络连接,client && server
client代码: package socket; import java.io.IOException; import java.net.Socket; /** * 客户端_聊天室 * * @aut ...
- node.js+websocket实现简易聊天室
(文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...
- 使用Android网络编程实现简易聊天室
在Java中我们可以利用socket编程实现聊天室,在Android中也一样,因为Android完全支持JDK本身的TCP.UDP网络通信API.我们可以使用ServerSocket.Socket来建 ...
随机推荐
- Anticancer Effect of Deuterium Depleted Water - Redox Disbalance Leads to Oxidative Stress(低氘水的抗癌作用-氧化还原失衡导致了氧化应激)-解读人:范徉
期刊名:Molecular & Cellular Proteomics 发表时间:(2019年12月) IF:4.828 单位:瑞典卡罗林斯卡学院 物种:人 技术:标记定量蛋白质组学,氧化还原 ...
- Spring Boot 最流行的 16 条实践解读!【华为云技术分享】
置顶:华为云618大促火热进行中,全场1折起,免费抽主机,消费满额送P30 Pro,点此抢购. Spring Boot是最流行的用于开发微服务的Java框架.在本文中,将与大家分享自2016年以来笔者 ...
- 谁说微服务是Spring Cloud的独角戏?Service Mesh了解一下?
Service Mesh 的概念自 2017 年初提出之后,受到了业界的广泛关注,作为微服务的下一代发展架构在社区迅速发酵,并且孵化出了诸如 Istio 等广受业界关注的面向于云原生 (Cloud N ...
- 华为云ModelArts图深度学习,学习知识还能考取微认证
作为人工智能最前沿的技术之一,图深度学习被公认是人工智能认识世界实现因果推理的关键,也是深度学习未来发展的方向.但深度学习对图数据模型的支持性差一直是众多研究者难以攻克的难点,因此图深度学习在实际生产 ...
- luogu P4943 密室 |最短路
题目描述 密室被打开了. 哈利与罗恩进入了密室,他们发现密室由n个小室组成,所有小室编号分别为:1,2,...,n.所有小室之间有m条通道,对任意两个不同小室最多只有一条通道连接,而每通过一条通道都需 ...
- Pandas学习(一)——数据的导入
欢迎加入python学习交流群 667279387 学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学 ...
- 基于leaflet的标绘功能(一)--可调整的圆
标绘功能是指在电子地图上可以标注点.线.面.复杂多边形等图形.主要操作包括上图.调整(大小.方向.位置).网络存储等.根据具体的业务场景,也可以做到协同标绘等特色功能.其中,要求每个图形有若干关键点控 ...
- R语言计算IV值
更多大数据分析.建模等内容请关注公众号<bigdatamodeling> 在对变量分箱后,需要计算变量的重要性,IV是评估变量区分度或重要性的统计量之一,R语言计算IV值的代码如下: Ca ...
- jwt Token验证与解析
网上似乎没有相关代码 贴上一段Token的解析认证 [TestMethod] public void TestMethod1() { string Token = "eyJhbGciOiJI ...
- Day 06 流程控制和爬虫基础2
目录 if 判断 单分支结构 双分支结构 多分支结构 for循环 for循环的基本用法 for循环嵌套 break continue 爬虫基础2 爬取豆瓣TOP250 爬取豆瓣数据接口(异步数据) 爬 ...