java游戏局域网实现的_java学习笔记: 实现简易局域网聊天程序
?
/*
使用UDP模式,编写一个聊天程序
有发送和接收数据2部分,
一个线程接收,一个线程发送
由于发送和接收动作是不一致的,所以要使用2个run方法
而且这两个方法要封装到不同的类中
本程序忽略了部分异常的处理,也未加入UI组件
这样比较简洁
发送端口9998
接受端口9999
用的是局域网广播地址,所以自己发的消息自己也收到了
[示例]:简易控制台聊天程序
*/
import java.net.*;
import java.io.*;
class Demo
{
public static void main(String[] args) throws Exception
{
DatagramSocket sendSocket = new DatagramSocket(9998); //发送端
DatagramSocket receSocket = new DatagramSocket(9999); //接收端
new Thread(new MsgSend(sendSocket)).start(); //发送线程
new Thread(new MsgRece(receSocket)).start(); //接受线程
}
}
class MsgSend implements Runnable //发送
{
private DatagramSocket dsock;
public MsgSend(DatagramSocket dsock)
{
this.dsock= dsock;
}
public void run()
{
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String lineStr = null;
try
{
while(true)
{
lineStr = bufr.readLine();
if(lineStr!=null)
{
if(lineStr.equals("over886"))
{
break;
}
else
{
byte[] dataBuf = lineStr.getBytes();
DatagramPacket dataPack = //数据打包
new DatagramPacket( dataBuf,
dataBuf.length,
InetAddress.getByName("192.168.1.255"), //广播
9999 //目标端口
);
dsock.send(dataPack);
}
}
}
bufr.close();
dsock.close();
}
catch(Exception e)
{
throw new RuntimeException("发送失败!");
}
}
}
class MsgRece implements Runnable //接收
{
private DatagramSocket dsock;
public MsgRece(DatagramSocket dsock)
{
this.dsock= dsock;
}
public void run()
{
try
{
while(true)
{
byte[] dataBuf = new byte[1024];
DatagramPacket dataPack = new DatagramPacket(dataBuf,dataBuf.length);
dsock.receive(dataPack); //将获取的数据保存到指定的数据包
String ip = dataPack.getAddress().getHostAddress();
String data = new String(dataPack.getData(),0,dataPack.getLength());
int port = dataPack.getPort();
System.out.println();
System.out.println("来自ip为 "+ip+" : "+port+" 的消息");
System.out.println(data);
}
}
catch(Exception e)
{
throw new RuntimeException("接受失败!");
}
finally
{
dsock.close();
}
}
}
?
?
?
大小: 30.8 KB
查看图片附件
java游戏局域网实现的_java学习笔记: 实现简易局域网聊天程序相关推荐
- java画笔覆盖在界面_Java学习笔记:swing画笔工具Graphics,刷新页面,键盘事件,随机数等【诗书画唱】...
Graphics:画笔工具 setColor:设置画笔颜色 DrawRect:空心矩形 fillRect:实心矩形 DrawOavl:空心圆 fillOavl:实心圆 DrawLine:画线(注意) ...
- JAVA不同类型数组重载_java学习笔记--java中的方法与数组
方法 完成特定功能的代码块 方法的格式 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...){ //方法体 return 返回值: } 方法的调用方式 通过方法名调用方法 根据形 ...
- java继承的终极奥义_java学习笔记12-继承
继承就是子类继承父类的特征和行为 有时候单一划分某个类别并不能处理所有情况,某些类别下有明显不同的子类,这些子类虽然拥有类似的行为和属性,但是他们各自发生的这些行为的方式或者属性对某些结果的影响是不一 ...
- java函数定义的要素_Java学习笔记八(方法)
方法是解决一类问题的有序步骤的集合.将程序中共有的代码放在一起,然后统一调用这一个代码,那么这个代码块则称为方法. 方法尽可能要独立,一个方法最好只解决一个问题. 1.方法的优点 <1>减 ...
- java applet 输出多行_java学习笔记-输入输出、Applet和多线程开发
java虚拟机 Java虚拟机(Java Virtual Machine) 简称JVM Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现.Java虚拟机有自己想象中的硬件,如处理器 ...
- java当前时间转化毫秒_Java学习笔记-时间相关类
1. Date类: java.util.Date 时间原点:1970年1月1日00:00:00(中国+8小时) System.currentTimeMillis() 计算当前时间到原点经历的毫秒数 无 ...
- java 怎么判别注释符_java学习笔记二(注释、关键字、标识符)
了解一下几个概念:注释.关键字.标识符. 然后记住java主程序的基本结构,再通过编写hello world案例来进一步了解java程序. 1.注释 如果程序中代码太多时,方便我们查看代码,所以就要给 ...
- java如何显示当天世界_Java学习笔记——显示当前日期的三种方式
一.Date类:这是一种过时的表达方式 import java.util.Date;Date date = new Date(); System.out.println((1900+date.getY ...
- java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式
Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...
- java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...
六.Java类 1. Java中用关键字class来创建类. 2. 类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3. 类的定义: [] class [extend ...
最新文章
- RPC-原理及RPC实例分析
- vue代码转换成小程序
- java 并发 同步信号_Java并发教程–信号量
- 当当elastic-job docker快速部署_[小Z课堂]-docker 快速部署 elasticsearch 和 kibana,一键部署...
- HTTP笔记-浏览器是如何识别点击的链接是下载文件还是展示页面
- php重度写如何优化,win10玩游戏掉帧严重怎么处理
- 使用 pip 安装第三方库时出现:Read timed out
- 常见的9种前端跨域解决方案详解
- 自动安装L2tp的脚本
- 万网域名证书如何查询下载_备案域名证书获取
- 解决宏碁5750g ubuntu无法调整和保存屏幕亮度的问题
- 山东省计算机软件比赛,第十七届山东省大学生软件设计大赛“互联网+”组决赛成功举行...
- R: symbol lookup error: /home/lib/../../libreadline.so.6: undefined symbol: PC
- 手机与计算机之间的文件传输,电脑与手机如何快速传输文件
- 自动驾驶打响新一轮“金元战”
- vue2.0 在华为手机等手机自带浏览器打开白屏的问题
- 计算机ping不通dns,电脑不能上网但是可以Ping通和DNS解析解决办法是什么
- 深度相机原理揭秘之飞行时间法(TOF)
- uboot什么意思(uboot fastboot)
- HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP | Spring Cloud 13