Socket实现简易聊天室,Client,Server
2019-12-17 16:02:31来源:博客园 阅读 ()
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();//调用方法
}
}
原文链接:https://www.cnblogs.com/xingsir/p/12053174.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:CAS与ABA问题产生和优雅解决
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
- Spring Boot 实现定时任务的 4 种方式 2020-06-10
- JSP+SSH+Mysql+DBCP实现的租车系统 2020-06-09
- Java实现的三种字符串反转 2020-06-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash