java實現(xiàn)簡易局域網(wǎng)聊天功能
更新時間:2022年05月19日 16:47:26 作者:xouou_53320
這篇文章主要為大家詳細介紹了java實現(xiàn)簡易局域網(wǎng)聊天功能,使用UDP模式編寫一個聊天程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了java使用UDP模式編寫聊天程序的具體代碼,供大家參考,具體內(nèi)容如下
Java代碼:
/*
使用UDP模式,編寫一個聊天程序
有發(fā)送和接收數(shù)據(jù)2部分,
一個線程接收,一個線程發(fā)送
由于發(fā)送和接收動作是不一致的,所以要使用2個run方法
而且這兩個方法要封裝到不同的類中
本程序忽略了部分異常的處理,也未加入UI組件
這樣比較簡潔
發(fā)送端口9998
接受端口9999
用的是局域網(wǎng)廣播地址,所以自己發(fā)的消息自己也收到了
[示例]:簡易控制臺聊天程序
*/
import java.net.*;
import java.io.*;
class Demo
{
public static void main(String[] args) throws Exception
{
DatagramSocket sendSocket = new DatagramSocket(9998); //發(fā)送端
DatagramSocket receSocket = new DatagramSocket(9999); //接收端
new Thread(new MsgSend(sendSocket)).start(); //發(fā)送線程
new Thread(new MsgRece(receSocket)).start(); //接受線程
}
}
class MsgSend implements Runnable //發(fā)送
{
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 = //數(shù)據(jù)打包
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("發(fā)送失敗!");
}
}
}
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); //將獲取的數(shù)據(jù)保存到指定的數(shù)據(jù)包
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();
}
}
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot @Import與@Conditional注解使用詳解
在了解spring boot自動配置原理前,再來了解下兩個注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進行判斷,滿足條件給容器注冊bean2022-10-10
Spring Bean創(chuàng)建和循環(huán)依賴
這篇文章主要介紹了Spring Bean創(chuàng)建和循環(huán)依賴,講述了Spring容器中?Bean?的創(chuàng)建過程已經(jīng)主要的方法,另外也著重分析了循環(huán)依賴的問題,需要的小伙伴可以參考一下2022-05-05
SpringCloud?Alibaba環(huán)境集成之nacos詳解
Spring?Cloud?Alibaba提供了越來越完善的各類微服務(wù)治理組件,比如分布式服務(wù)配置與注冊中心nacos,服務(wù)限流、熔斷組件sentinel等,本篇先來介紹SpringCloud?Alibaba環(huán)境集成之nacos詳解,需要的朋友可以參考下2023-03-03
Java線程間協(xié)作wait、notify和notifyAll詳解
這篇文章主要介紹了Java線程間協(xié)作wait、notify和notifyAll詳解,在 Java 中可以用 wait、notify 和 notifyAll 來實現(xiàn)線程間的通信,盡管關(guān)于wait和notify的概念很基礎(chǔ),它們也都是Object類的函數(shù),但用它們來寫代碼卻并不簡單,,需要的朋友可以參考下2023-10-10
MyBatis-Plus攔截器實現(xiàn)數(shù)據(jù)權(quán)限控制的示例
本文主要介紹了MyBatis-Plus攔截器實現(xiàn)數(shù)據(jù)權(quán)限控制的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
Spring-Security對HTTP相應(yīng)頭的安全支持方式
這篇文章主要介紹了Spring-Security對HTTP相應(yīng)頭的安全支持方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10

