2021手机qq创建讨论组 qq如何创建多人聊天不是群聊( 二 )


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;
}
// 发送消息
private void send(String msg) {
try {
dos.writeUTF(msg);
} catch (IOException e) {
relese();
}
}
// 群聊,发给别人
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是自定义的一个类
Util.close(dis, dos, client);
}
@Override
public void run() {
while (isRunning) {
String msg = receive();
if (!msg.equals(“”)) {
sendOthers(msg);
}
}
}
}
}
(由于从JDK中复制过来的代码格式会被平台调整,所以这里照齐上可能不太好看 。)
客户端客户端中用到了接收信息、发送信息以及释放资源
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(“请输入用户名”);
String name = br.readLine();
// 建立连接,使用Socket创建连接,括号内置服务器的地址和端口
Socket client = new Socket(“localhost”, 12345);
// 客户端发送消息
new Thread(new Send(client, name)).start();
new Thread(new Receive(client)).start();
}
}
(由于从JDK中复制过来的代码格式会被平台调整,所以这里照齐上可能不太好看 。)
在实现客户端的时候,我这里是在控制台输入的信息,也可以进行跨级聊天,但前提是要在同一个局域网内,对于客户端来说,需要客服端进行发送信息和接收信息,首先看看接收信息吧
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;
//这里是传过来了一个客户端对象,并获得了输入流对象
public Receive(Socket client) {
this.client = client;
try {
dis = new DataInputStream(client.getInputStream());
isRunning = true;
} catch (IOException e) {
release();
}
}
//这里是实现了获取信息
private String receive() {
String msg = “”;
try {
msg = dis.readUTF();
} catch (IOException e) {
release();
}
return msg;
}
//这是重写了run方法,实现多线程,也就是多个客户端都能与服务器打交道
@Override
public void run() {
while (isRunning) {
String msg = receive();


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: