name = receive();
} catch (IOException e) {
relese();
}
try {
dos = new DataOutputStream(client.getOutputStream());
} catch (IOException e) {
relese();
}
}
// 接收消息
private String receive() {
String msg = “”;
try {
msg = dis.readUTF();
} catch (IOException e) {
relese();
}
return msg;
}
// 發(fā)送消息
private void send(String msg) {
try {
dos.writeUTF(msg);
} catch (IOException e) {
relese();
}
}
// 群聊,發(fā)給別人
private void sendOthers(String msg) {
// 私聊格式@XXX:這里是找到以@開頭的信息
if (msg.startsWith(“@”)) {
int idx = msg.indexOf(“:”);
String targetName = msg.substring(1, idx);
msg = msg.substring(idx + 1);
for (Channel other : list) {
if (other.name.equals(targetName)) {
other.send(this.name + “:” + msg);
}
}
} else {
for (Channel other : list) {
if (other == this) {
continue;
} else {
other.send(this.name + “:” + msg);
}
}
}
}
// 釋放資源
private void relese() {
this.isRunning = false;
//這里的Util是自定義的一個(gè)類
Util.close(dis, dos, client);
}
@Override
public void run() {
while (isRunning) {
String msg = receive();
if (!msg.equals(“”)) {
sendOthers(msg);
}
}
}
}
}
(由于從JDK中復(fù)制過來的代碼格式會(huì)被平臺(tái)調(diào)整,所以這里照齊上可能不太好看 。)
客戶端客戶端中用到了接收信息、發(fā)送信息以及釋放資源
package com.TCP;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
System.out.println(“—Client—“);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(“請(qǐng)輸入用戶名”);
String name = br.readLine();
// 建立連接,使用Socket創(chuàng)建連接,括號(hào)內(nèi)置服務(wù)器的地址和端口
Socket client = new Socket(“localhost”, 12345);
// 客戶端發(fā)送消息
new Thread(new Send(client, name)).start();
new Thread(new Receive(client)).start();
}
}
(由于從JDK中復(fù)制過來的代碼格式會(huì)被平臺(tái)調(diào)整,所以這里照齊上可能不太好看 。)
在實(shí)現(xiàn)客戶端的時(shí)候,我這里是在控制臺(tái)輸入的信息,也可以進(jìn)行跨級(jí)聊天,但前提是要在同一個(gè)局域網(wǎng)內(nèi),對(duì)于客戶端來說,需要客服端進(jìn)行發(fā)送信息和接收信息,首先看看接收信息吧
package com.TCP;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
public class Receive implements Runnable {
private DataInputStream dis;
private Socket client;
private boolean isRunning;
//這里是傳過來了一個(gè)客戶端對(duì)象,并獲得了輸入流對(duì)象
public Receive(Socket client) {
this.client = client;
try {
dis = new DataInputStream(client.getInputStream());
isRunning = true;
} catch (IOException e) {
release();
}
}
//這里是實(shí)現(xiàn)了獲取信息
private String receive() {
String msg = “”;
try {
msg = dis.readUTF();
} catch (IOException e) {
release();
}
return msg;
}
//這是重寫了run方法,實(shí)現(xiàn)多線程,也就是多個(gè)客戶端都能與服務(wù)器打交道
@Override
public void run() {
while (isRunning) {
String msg = receive();
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- cad動(dòng)態(tài)塊的創(chuàng)建完整步驟 cad動(dòng)態(tài)塊怎么做
- 怎么申請(qǐng)開通注冊(cè)郵箱賬號(hào)? 如何創(chuàng)建自己的電子郵件
- 字里行間,傳遞希望!暴雨后救命文檔創(chuàng)建者是河南籍大學(xué)生 萬古神帝飛天魚
- 暴雨救命文檔創(chuàng)建者是河南籍大學(xué)生 萬古神帝飛天魚
- 電腦怎么創(chuàng)建圖片密碼? 圖片密碼怎么設(shè)置
- linux創(chuàng)建用戶命令代碼講解 linux創(chuàng)建用戶命令代碼
- 創(chuàng)建存儲(chǔ)過程語法 創(chuàng)建存儲(chǔ)過程的語句是什么
- 2021手機(jī)兼職項(xiàng)目 未成年手機(jī)兼職賺錢一單一結(jié)50元
- 2021手機(jī)兼職軟件推薦 手機(jī)上做兼職賺零花錢做什么
- 手把手教你注冊(cè)谷歌賬號(hào) 安卓手機(jī)怎么創(chuàng)建谷歌賬號(hào)
