久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

java網絡編程之群聊功能

這篇文章主要為大家詳細介紹了java網絡編程之群聊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java網絡編程之群聊功能的具體代碼,供大家參考,具體內容如下

1、服務端

package networkCoding;
?
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.CopyOnWriteArrayList;
?
/**
?*?
?* 1, 指定端口,使用serverSocket創建服務器
?* 2, 阻塞式等待連接accept
?* 3, 操作:輸入輸出流操作
?* 4, 釋放資源
?*?
?* 5,加入容器實現群聊
?*?
?* **/
?
public class WeiHuShanChatRoomServer {
? ? private static CopyOnWriteArrayList<Chat> all= new CopyOnWriteArrayList<Chat>();
?
?? ?public static void main(String[] args) throws IOException {
?? ??? ?System.out.println("-----server");
?? ??? ? // 1, 指定端口,使用serverSocket創建服務器
?? ??? ?ServerSocket server= new ServerSocket(9999);
?? ??? ? // 2, 阻塞式等待連接accept
?? ??? ?while(true) {
?? ??? ?Socket client=server.accept();
?? ??? ?Chat chat= new Chat(client);
?? ??? ?// 交給容器管理
?? ??? ?all.add(chat);
?? ??? ?new Thread(chat) .start();
?? ??? ?}
?? ?}
?? ?static class Chat implements Runnable{
?? ??? ?private DataOutputStream dos;
?? ??? ?private DataInputStream dis;
?? ??? ?private Socket client;
?? ??? ?private boolean isRuning;
?? ??? ?private String name;
?? ??? ?public Chat(Socket client) {
?? ??? ??? ?this.client=client;
?? ??? ??? ?this.isRuning=true;
?? ??? ??? ?try {
?? ??? ??? ??? ?this.dis = new DataInputStream(client.getInputStream());
?? ??? ??? ??? ?this.dos=new DataOutputStream(client.getOutputStream());
?? ??? ??? ??? ?this.name=receive();
?? ??? ??? ??? ?this.send(this.name+",威虎山歡迎你的到來");
?? ??? ??? ??? ?this.sendOthers(this.name+"來到了威虎山",true);
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?// 出錯釋放資源
?? ??? ??? ??? ?System.out.println("===1==");
?? ??? ??? ??? ?this.release();
?? ??? ??? ?
?? ??? ??? ?}
?? ??? ?}
?? ??? ?private String receive() {
?? ??? ??? ?String data="";
?? ??? ??? ?try {
?? ??? ??? ??? ?data= dis.readUTF();
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?System.out.println("===2==");
?? ??? ??? ??? ?//this.release();
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ??? ?return data;
?? ??? ?}
?? ??? ?// 群聊
?? ??? ?private void send(String data) {
?? ??? ??? ?try {
?? ??? ??? ??? ?dos.writeUTF(data);
?? ??? ??? ??? ?dos.flush();
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?System.out.println("===3==");
?? ??? ??? ??? ?this.release();
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?}
?? ??? ?private void sendOthers(String data,boolean isSys) {
?? ??? ??? ?boolean isPrivate = data.startsWith("@");?
?? ??? ??? ?if(isPrivate) {
?? ??? ??? ??? ?int index= data.indexOf(":");
?? ??? ??? ??? ?String targetName=data.substring(1,index);
?? ??? ??? ??? ?String msg=data.substring(index+1);
?? ??? ??? ??? ?for (Chat chat : all) {
?? ??? ??? ??? ??? ?if(chat.name.equals(targetName)) {
?? ??? ??? ??? ??? ??? ?System.out.println("******"+chat.name+targetName);
?? ??? ??? ??? ??? ??? ?chat.send(this.name+"悄悄對你說:"+msg);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ?}else {
?? ??? ??? ??? ?for (Chat chat : all) {
?? ??? ??? ??? ??? ?if(chat==this) {
?? ??? ??? ??? ??? ??? ?continue;
?? ??? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ??? ?if(isSys) {
?? ??? ??? ??? ??? ??? ??? ?chat.send(data);
?? ??? ??? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ??? ??? ?chat.send(this.name+"對大家說:"+data);
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ??? ?private void release() {
?? ??? ??? ?this.isRuning=false;
?? ??? ??? ?Utils.close(dis,dos,client);
?? ??? ??? ?all.remove(this);
?? ??? ??? ?sendOthers(this.name+"離開了威虎山", true);
?? ??? ?}
?? ??? ?@Override
?? ??? ?public void run() {
?? ??? ??? ?while(isRuning) {
?? ??? ??? ??? ?String data = receive();
?? ??? ??? ??? ?if(!data.equals("")) {
?? ??? ??? ??? ??? ? sendOthers(data,false);
?? ??? ??? ??? ?}else {
?? ??? ??? ??? ??? ?send("不能發送空消息");
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ?}
?
}

2、客戶端

package networkCoding;
?
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
?
/**
?*?
?* 1, 建立連接,使用socket 創建客戶端 + 服務端的地址端口號;
?* 2, 操作:輸入輸出流操作
?* 3, 釋放資源
?*?
?* **/
?
public class WeiHuShanChatRoomClient {
?
?? ?public static void main(String[] args) throws UnknownHostException, IOException {
?? ??? ?BufferedReader bf= new BufferedReader(new InputStreamReader(System.in));
?? ??? ?System.out.println("請輸入姓名");
?? ??? ?String bfString = bf.readLine();
?? ??? ?//1, 建立連接,使用socket 創建客戶端 + 服務端的地址端口號;
?? ??? ?Socket client = new Socket("localhost",9999);
?? ??? ?// 2, 操作:輸入輸出流操作
?? ??? ?new Thread(new Send(client,bfString)).start();
?? ??? ?new Thread(new Receive(client)).start();
?? ??? ?
?? ?}
?? ?
?
}

(1)發送封裝類

package networkCoding;
?
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
?
public class Send implements ?Runnable{
?? ?private BufferedReader bf;
?? ?private DataOutputStream dos;
?? ?private Socket client;
?? ?private boolean isRuning;
?? ?private String name;
?? ?public Send(Socket client,String name) {
?? ??? ?this.client=client;
?? ??? ?this.isRuning=true;
?? ??? ?this.name=name;
?? ??? ?this.bf= new BufferedReader(new InputStreamReader(System.in));
?? ??? ?try {
?? ??? ??? ?this.dos=new DataOutputStream(client.getOutputStream());
?? ??? ??? ?this.send(name);
?? ??? ?} catch (IOException e) {
?? ??? ??? ?// 出錯釋放資源
?? ??? ??? ?System.out.println("===4==");
?? ??? ??? ?this.release();
?? ??? ??? ?this.isRuning=false;
?? ??? ?}
?? ?}
?? ?private void release() {
?? ??? ?this.isRuning=false;
?? ??? ?Utils.close(dos,client);
?? ?}
?? ?private void send(String data) {
?? ??? ?try {
?? ??? ??? ?dos.writeUTF(data);
?? ??? ??? ?dos.flush();
?? ??? ?} catch (IOException e) {
?? ??? ??? ?System.out.println("===5==");
?? ??? ??? ?this.release();
?? ??? ??? ?
?? ??? ?}
?? ?}
?? ?private String getString() {
?? ??? ?String dataString ="";
?? ??? ?try {
?? ??? ??? ?dataString = this.bf.readLine();
?? ??? ?} catch (IOException e) {
?? ??? ??? ?System.out.println("===6==");
?? ??? ??? ?this.release();
?? ??? ?}
?? ??? ?return dataString;
?? ?}
?? ?
?? ?@Override
?? ?public void run() {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?while(isRuning) {
?? ??? ??? ?String data = getString();
?? ??? ??? ?if(!data.equals("")) {
?? ??? ??? ??? ?send(data);
?? ??? ??? ?}else {
?? ??? ??? ??? ?//send("不能發送空消息");
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ?}
?
}

(2)接收封裝類

package networkCoding;
?
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
?
public class Receive implements Runnable {
?? ?private DataInputStream dis;
?? ?private Socket client;
?? ?private boolean isRuning;
?? ?public Receive(Socket client) {
?? ??? ?this.client=client;
?? ??? ?this.isRuning=true;
?? ??? ?try {
?? ??? ??? ?this.dis = new DataInputStream(client.getInputStream());
?? ??? ?} catch (IOException e) {
?? ??? ??? ?// 出錯釋放資源
?? ??? ??? ?System.out.println("===6==");
?? ??? ??? ?this.release();
?? ??? ??? ?this.isRuning=false;
?? ??? ?}
?? ?}
?? ?private String receive() {
?? ??? ?String data="";
?? ??? ?try {
?? ??? ??? ?data= dis.readUTF();
?? ??? ?} catch (IOException e) {
?? ??? ??? ?System.out.println("===7==");
?? ??? ??? ?this.release();
?? ??? ?}
?? ??? ?return data;
?? ?}
?? ?private void release() {
?? ??? ?this.isRuning=false;
?? ??? ?Utils.close(dis,client);
?? ?}
?? ?@Override
?? ?public void run() {
?? ??? ?while(isRuning) {
?? ??? ??? ?String data = receive();
?? ??? ??? ?if(!data.equals("")) {
?? ??? ??? ??? ?System.out.println(data);
?? ??? ??? ?}else {
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ??? ?
?? ?}
?
?? ?
?
}

3、工具類

package networkCoding;
?
import java.io.Closeable;
import java.io.IOException;
?
public class Utils {
?? ?public static void main(String[] args) {
?? ??? ?
?? ?}
?? ?public static void close(Closeable...target) {
?? ??? ?for (Closeable obj : target) {
?? ??? ??? ?try {
?? ??? ??? ??? ?if(null!=obj) {
?? ??? ??? ??? ??? ?obj.close();
?? ??? ??? ??? ?}
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?? ??? ?}
?? ?}
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持html5模板網。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要為大家詳細介紹了Java使用MulticastSocket實現群聊應用程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
用戶上傳大文件,網絡差點的需要歷時數小時,萬一線路中斷,不具備斷點續傳的服務器就只能從頭重傳,而斷點續傳就是,允許用戶從上傳斷線的地方繼續傳送,這樣大大減少了用戶的
有的時候我們需要鼠標一直滑動的情況,為了節省時間,本文用Java語言寫了一個腳本,可以實現鼠標隨機移動,感興趣的小伙伴可以了解一下
這篇文章主要為大家介紹了JavaString中intern方法的原理以及使用。文中通過圖片和示例代碼進行了詳細展示,感興趣的小伙伴可以跟隨小編一起學習一下
這篇文章主要介紹了Java中用戶線程與守護線程的使用區別,Java語言中無論是線程還是線程池,默認都是用戶線程,因此用戶線程也被成為普通線程,下文關于其與守護線程的區別詳情,
本文主要介紹了Java中ReentrantLock?4種常見的坑,ReentrantLock默認情況下為非公平鎖,下文關于其更多詳情需要的小伙伴可以參考一下
主站蜘蛛池模板: 在线一区二区国产 | 欧美日韩视频在线第一区 | 欧美做暖暖视频 | 亚洲午夜精品一区二区三区 | 欧美天堂| 国产成人精品免高潮在线观看 | 亚洲成人免费视频 | 日韩一区二区三区四区五区六区 | 久久久视 | 日韩中文字幕一区二区 | 色婷婷综合成人av | 国产精品久久久久久吹潮 | 91精品国产91久久综合桃花 | 99久久精品国产毛片 | 天天影视亚洲综合网 | 国产精品久久一区 | 中文字幕国产视频 | 2一3sex性hd| 成人午夜精品 | 老外几下就让我高潮了 | 久久久xxx| 久久91精品| 视频国产一区 | 欧美三级在线 | 精品在线视频播放 | 日韩欧美国产一区二区三区 | 欧美一区二区三区在线 | 国产精品高潮呻吟 | 中文字幕日韩欧美一区二区三区 | 性国产丰满麻豆videosex | 亚洲精品成人网 | 久久高清免费视频 | 日本一二区视频 | 国产日韩欧美 | 国产二区精品视频 | 欧美日韩最新 | 一区二区三区欧美在线 | 97超碰人人 | 一区二区三区四区在线视频 | 亚洲欧美在线视频 | 欧美视频 亚洲视频 |