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来建 ...
随机推荐
- iOS13暂时关闭黑暗模式+应用内状态栏无法显示问题解决办法
现象: iOS13黑暗模式开启后,app显示会出现很多意外显示情况.暂时屏蔽是最好的选择.当开启黑暗模式,且在项目的target对应的info.plist中添加以下设置时(禁用黑暗模式): <k ...
- Kafka 安装配置 及 简单实验记录
1. 下载二进制文件并解压,并修改 broker.id 的值 wget http://apache.fayea.com/kafka/0.10.0.0/kafka_2.10-0.10.0.0.tgz - ...
- Tomcat下载安装并部署到IDEA(附带idea两种热部署设置方法)
目录 Tomcat下载教程 Tomcat安装教程 Tomcat热部署到IDEA idea两种热部署设置方法 使用Idea的时候,修改了代码,需要反复的重启Tomcat,查看效果,是不是贼烦?还记得刚上 ...
- 信鸽推送Push API
目录 信鸽推送 push API 0. 基本 push 1. 根据 token list,推送到android和ios 2. 推送到android和ios 所有用户 信鸽推送 push API 参考: ...
- RabbitMQ的三大交换器
pom文件都是相同的 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- 2019 牛客国庆集训派对day1-C Distinct Substrings(exkmp+概率)
链接:https://ac.nowcoder.com/acm/contest/1099/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- CodeForces-999A-Mishka and Contest
Mishka started participating in a programming contest. There are nn problems in the contest. Mishka' ...
- Spring Cloud第八篇 | Hystrix集群监控Turbine
本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...
- [FPGA]Verilog 60s秒表计时器(最大可计时间长达9min)
[FPGA]Verilog 60s秒表计时器 1.引述 这次的实验来自于本人本科课程数电结课时的自选题目.由于这次上传是后知后觉,学校已将小脚丫板子回收,所以在这篇文章中没法贴出代码结果的效果图了,但 ...
- Appium之环境搭建
Appium:是开源.跨平台.多语言支持的移动应用自动化工具 测试对象主要有:① 原生app ② 混合app(h5 + web前端基础) ③ 移动web app 测试对象APPy运行平台: ① io ...