Java–实现(同局域网)简单聊天案例
(代码如下,需要练习请自取)
注:下列都需要在idea中完成,客户端和服务端都要运行才可链接一者断开两者程序都结束运行
单线程
只能实现一个客户端连接
客户端
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
//客户端
try{
Socket c = new Socket("127.0.0.1",6666);
//此处ip地址为客户端ip
//“6666”为服务端设置的口令相当于密码
PrintWriter out = new PrintWriter(c.getOutputStream()); //发信息
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); //接信息
while(true) {
//发信息
System.out.println("发信息:");
String msg = new Scanner(System.in).nextLine() + "\r\n";
out.write(msg);
out.flush();
//先收信息
String info = br.readLine();
System.out.println(info);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
服务端
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
public static void main(String[] args) {
//List<Socket> lists = new ArrayList<>();
//服务器
try {
//System.out.println(InetAddress.getLocalHost().getHostAddress());
ServerSocket server = new ServerSocket(6666);
//“6666”设置口令相当于密码
Socket c = server.accept();
System.out.println("有人上线");
PrintWriter out = new PrintWriter(c.getOutputStream()); //发信息
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); //接信息
while (true) {
//先收信息
String msg = br.readLine();
System.out.println(msg);
//发信息
System.out.println("发信息:");
String info = new Scanner(System.in).nextLine() + "\r\n";
out.write(info);
out.flush();
}
//while(true) {
// Socket c = server.accept();//中断
// lists.add(c);
// System.out.println("有人连线");
//}
} catch (Exception e) {
e.printStackTrace();
}
}
}
多线程
能实现多个客户端连接服务端
服务端
服务端的实现方法
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.util.Scanner;
public class ChatUtil {
private PrintWriter writer;
private BufferedReader reader;
private String title;
public ChatUtil(PrintWriter writer, BufferedReader reader, String title) {
this.writer = writer;
this.reader = reader;
this.title = title;
}
/**
* 发信息
*/
public void a() {
while (true) {
//发信息
String info = title + ":" + new Scanner(System.in).nextLine() + "\r\n";
writer.write(info);
writer.flush();
}
}
public void b() {
while (true) {
try {
//先收信息
String msg = reader.readLine();//
System.out.println(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public PrintWriter getWriter() {
return writer;
}
public void setWriter(PrintWriter writer) {
this.writer = writer;
}
public BufferedReader getReader() {
return reader;
}
public void setReader(BufferedReader reader) {
this.reader = reader;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
服务端的执行程序
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(6666);
Socket c = server.accept();
PrintWriter writer = new PrintWriter(c.getOutputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
ChatUtil cu = new ChatUtil(writer,reader,"服务器");
new Thread(cu::a).start();
new Thread(cu::b).start();
}catch (Exception e) {
e.printStackTrace();
}
}
}
客户端
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try{
Socket c = new Socket("127.0.0.1",6666);
PrintWriter writer = new PrintWriter(c.getOutputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
ChatUtil cu = new ChatUtil(writer,reader,"客户");
new Thread(cu::a).start();
new Thread(cu::b).start();
}catch(Exception e){
e.printStackTrace();
}
}
}
版权声明:本文为qq_46089857原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。