久久久久久久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創(chuàng)建服務器
?* 2, 阻塞式等待連接accept
?* 3, 操作:輸入輸出流操作
?* 4, 釋放資源
?*?
?* 5,加入容器實現(xiàn)群聊
?*?
?* **/
?
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創(chuàng)建服務器
?? ??? ?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("不能發(fā)送空消息");
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ?}
?
}

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 創(chuàng)建客戶端 + 服務端的地址端口號;
?* 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 創(chuàng)建客戶端 + 服務端的地址端口號;
?? ??? ?Socket client = new Socket("localhost",9999);
?? ??? ?// 2, 操作:輸入輸出流操作
?? ??? ?new Thread(new Send(client,bfString)).start();
?? ??? ?new Thread(new Receive(client)).start();
?? ??? ?
?? ?}
?? ?
?
}

(1)發(fā)送封裝類

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("不能發(fā)送空消息");
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ?}
?
}

(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模板網。

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

相關文檔推薦

這篇文章主要為大家詳細介紹了Java使用MulticastSocket實現(xiàn)群聊應用程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
用戶上傳大文件,網絡差點的需要歷時數(shù)小時,萬一線路中斷,不具備斷點續(xù)傳的服務器就只能從頭重傳,而斷點續(xù)傳就是,允許用戶從上傳斷線的地方繼續(xù)傳送,這樣大大減少了用戶的
有的時候我們需要鼠標一直滑動的情況,為了節(jié)省時間,本文用Java語言寫了一個腳本,可以實現(xiàn)鼠標隨機移動,感興趣的小伙伴可以了解一下
這篇文章主要為大家介紹了JavaString中intern方法的原理以及使用。文中通過圖片和示例代碼進行了詳細展示,感興趣的小伙伴可以跟隨小編一起學習一下
這篇文章主要介紹了Java中用戶線程與守護線程的使用區(qū)別,Java語言中無論是線程還是線程池,默認都是用戶線程,因此用戶線程也被成為普通線程,下文關于其與守護線程的區(qū)別詳情,
本文主要介紹了Java中ReentrantLock?4種常見的坑,ReentrantLock默認情況下為非公平鎖,下文關于其更多詳情需要的小伙伴可以參考一下
主站蜘蛛池模板: 午夜天堂 | 国产精品久久久久久久午夜片 | 亚洲国产成人一区二区 | 99re热精品视频 | 97精品国产一区二区三区 | 伊人伊人 | 在线观看亚洲精品 | 做a视频在线观看 | 精品国产91乱码一区二区三区 | 国产精品99久久久久久www | 一级毛片网 | 日韩一级欧美一级 | 一二区电影| 不卡在线视频 | 日本超碰 | 成人精品在线观看 | 国产成人精品一区二区三 | 天天干视频网 | 久草在线影 | 国产欧美日韩一区二区三区在线观看 | 新超碰97| 欧美精品成人一区二区三区四区 | 亚洲欧洲一区二区 | 成人免费网站 | 91视频免费在观看 | 精品二区| 久久成人精品视频 | 精品久久影院 | 精品国产免费一区二区三区五区 | 国产精品网址 | 91精品久久久久久久久 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 亚洲欧美激情国产综合久久久 | 精品一区二区三区电影 | 亚洲欧美网站 | 国产亚洲一区二区三区在线观看 | 免费一区在线观看 | 午夜影院在线视频 | 7777在线视频免费播放 | 亚洲一区二区久久久 | 三级国产三级在线 |