怎么用java socket实现局域网聊天
发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,这篇文章主要介绍"怎么用java socket实现局域网聊天"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么用java socket实现局域网聊天"文章能帮
千家信息网最后更新 2024年09月30日怎么用java socket实现局域网聊天
这篇文章主要介绍"怎么用java socket实现局域网聊天"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么用java socket实现局域网聊天"文章能帮助大家解决问题。
代码很简单分为两个类,一个服务器类,一个客户端,运行时分别启动两个线程一个负责接受另一个负责发送。
整体流程是 两台机器分别启动程序,一个选择主动连接 另一个选择被动接受,即可实现类似qq的聊天效果两个人可以同时发送消息。
注意的事,不要在同一台电脑上同时启动两个,这样会服务端和客户端的ip都是相同很有可能造成自己发送的消息自己接受到了,可以两台电脑或者虚拟机里面进行。
服务端:
package com.server; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket; import com.client.RunClient; public class RunServer { public static Socket socket=null; /** * 建立服务器被动连接 * @throws IOException */ public void startServer() throws IOException { //服务器接收数据 ServerSocket serverSocekt=new ServerSocket(8888); System.out.println("服务器启动,等待连接..."); //创建客户端线程 RunClient rc=new RunClient(); Thread rct=new Thread(rc); rct.start(); //阻塞线程 监听端口建立socket会话 RunServer.socket=serverSocekt.accept(); //获取输入留 InputStream is=socket.getInputStream(); //将字节输入流转换成字符输入流 InputStreamReader isr=new InputStreamReader(is); //将字符输入流装入带缓冲的输入流中 BufferedReader br=new BufferedReader(isr); String str=null; while((str=br.readLine())!=null){ System.out.print("输出信息:"+str); } socket.shutdownInput(); serverSocekt.close(); }}
客户端:
package com.client; import java.io.BufferedWriter;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner; import com.server.RunServer; public class RunClient implements Runnable { @Override public void run() { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.println("1、主动连接\n2、被动等待"); String sign=input.next(); switch (sign) { case "1": try { System.out.println("输入服务器IP:"); startClient(input.next()); } catch (Exception e) { e.printStackTrace(); } break; case "2": try { startClient(); } catch (Exception e) { e.printStackTrace(); } break; default: break; } } /** * 由已经建立的socket 进行连接反向连 * @throws Exception * @throws UnknownHostException */ public void startClient() throws Exception{ while(true){ try { if(RunServer.socket!=null){ break; } Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } // 与服务器建立连接 Socket socket=new Socket(RunServer.socket.getInetAddress().getHostAddress(), 8888); System.out.println("连接建立成功..."); //向服务器写入流 OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); Scanner input=new Scanner(System.in); while(true){ System.out.println("输入信息:"); bw.write(input.next()); bw.newLine(); bw.flush(); } } /** * 通过IP与服务器建立连接 * @throws Exception * @throws UnknownHostException */ public void startClient(String ip) throws Exception{ // 与服务器建立连接 Socket socket=new Socket(ip, 8888); System.out.println("连接建立成功..."); //向服务器写入流 OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); Scanner input=new Scanner(System.in); while(true){ bw.write(input.next()); bw.newLine(); bw.flush(); } }}
main:
package com.start; import com.server.RunServer; public class Go { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub RunServer rs=new RunServer(); rs.startServer(); } }
效果:我是用虚拟机加本机
关于"怎么用java socket实现局域网聊天"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
服务
服务器
输入
两个
客户
局域
局域网
客户端
知识
线程
主动
成功
信息
同时
字符
效果
消息
电脑
行业
选择
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发专业行业需求与建议
上海服务器维修维保
服务器如何查询是不是raid1
数据库模式对象
网络技术升学班
重庆服务器托管哪家的好一些
高中信息技术使用数据库教案
电影 炸银行的数据库大楼
网络安全周知识内容
查数据库用户下所有视图
网络技术服务费科目
今日头条服务器数量
网络安全防诈骗班会记录
如何恢复旧数据库
软件开发助理岗位要求
软件开发四
数据库高级筛选数字范围怎么打
上游软件开发人员
wps如何读取网页的数据库
香肠派对服务器在哪
软件开发工程师和售前工程师
失落的方舟10010服务器验证失败
服务器硬件管理岗位
社区网络安全应急演练方案
南京兆米网络技术有限公司
泰兴个性化网络技术大概费用
shipsear数据库
彩虹六号异种连不上服务器
深信服服务器管理地址配置
计算机网络安全的优势