谁帮忙用JAVA写个客户及服务器模式的小型聊天程序
- 提问者网友:活着好累
- 2021-04-22 11:06
- 五星知识达人网友:街头电车
- 2021-04-22 12:27
//服务器端
package net;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
//服务器端
public class ServerSocket3 {
public static void main(String[] args) {
ServerSocket server = null;
Socket s = null;
InputStream is = null;
DataInputStream dis = null;
OutputStream os = null;
DataOutputStream dos = null;
BufferedReader br = null;
try {
server = new ServerSocket(4001); //绑定端口号
while(true)
{
s = server.accept(); //用socket类接收并监听客户端
while(true)
{
is = s.getInputStream(); //得到客户端的输入流
dis = new DataInputStream(is);
System.out.println("客户端请求:" + dis.readUTF());
//返回输出流给客户端
os = s.getOutputStream();
dos = new DataOutputStream(os);
br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
dos.writeUTF(str);
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//客户端
package net;
import java.io.*;
import java.net.*;
public class ClientSocket3 {
public static void main(String[] args) {
Socket s = null;
OutputStream os = null;
DataOutputStream dos = null;
InputStream is = null;
DataInputStream dis = null;
BufferedReader br = null;
try {
InetAddress address=InetAddress.getLocalHost();
s = new Socket(address.getHostAddress,4001);
//接收客户端返回的输出流
os = s.getOutputStream();
dos = new DataOutputStream(os);
br = new BufferedReader(new InputStreamReader(System.in));
//向服务器写内容
String str = br.readLine();
//如果输入exit客户端退出
while(!"exit".equals(str))
{
dos.writeUTF(str);
//读取服务器返回的数据
is = s.getInputStream();
dis = new DataInputStream(is);
System.out.println("服务器回应:" + dis.readUTF());
str = br.readLine();
}
} catch (UnknownHostException e) {
System.out.println("找不到主机");
e.printStackTrace();
} catch (IOException e) {
System.out.println("通讯异常");
e.printStackTrace();
}finally{
try {
dos.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
就是IO类多了点
耐心点看就能看懂
哪里不懂可以问我
- 1楼网友:毛毛
- 2021-04-22 13:00
服务器端:
import java.io.*; import java.net.*; import java.util.*;
public class ChatServer { boolean started = false; ServerSocket ss = null;
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) { new ChatServer().start(); }
public void start() { try { ss = new ServerSocket(8888); started = true; } catch (BindException e) { System.out.println("端口使用中...."); System.out.println("请关掉相关程序并重新运行服务器!"); System.exit(0); } catch (IOException e) { e.printStackTrace(); }
try {
while (started) { Socket s = ss.accept(); Client c = new Client(s); System.out.println("a client connected!"); new Thread(c).start(); clients.add(c); // dis.close(); } } catch (IOException e) { e.printStackTrace(); } finally { try { ss.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
class Client implements Runnable { private Socket s; private DataInputStream dis = null; private DataOutputStream dos = null; private boolean bConnected = false;
public Client(Socket s) { this.s = s; try { dis = new DataInputStream(s.getInputStream()); dos = new DataOutputStream(s.getOutputStream()); bConnected = true; } catch (IOException e) { e.printStackTrace(); } }
public void send(String str) { try { dos.writeUTF(str); } catch (IOException e) { clients.remove(this); System.out.println("对方退出了!我从List里面去掉了!"); // e.printStackTrace(); } }
public void run() { try { while (bConnected) { String str = dis.readUTF(); System.out.println(str); for (int i = 0; i < clients.size(); i++) { Client c = clients.get(i); c.send(str); //System.out.println(" a string send !"); } } } catch (EOFException e) { System.out.println("Client closed!"); } catch (IOException e) { e.printStackTrace(); } finally { try { if (dis != null) dis.close(); if (dos != null) dos.close(); if (s != null) { s.close(); //s = null; }
} catch (IOException e1) { e1.printStackTrace(); }
} }
} }
客户端:
import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*;
public class ChatClient extends Frame { Socket s = null; DataOutputStream dos = null; DataInputStream dis = null; private boolean bConnected = false;
TextField tfTxt = new TextField(); TextArea taContent = new TextArea(); Thread tRecv = new Thread(new RecvThread());
public static void main(String[] args) { new ChatClient().launchFrame(); }
public void launchFrame() { setLocation(400, 300); this.setSize(300, 300); add(tfTxt, BorderLayout.SOUTH); add(taContent, BorderLayout.NORTH); pack(); this.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent arg0) { disconnect(); System.exit(0); }
}); tfTxt.addActionListener(new TFListener()); setVisible(true); connect();
tRecv.start(); }
public void connect() { try { s = new Socket("127.0.0.1", 8888); dos = new DataOutputStream(s.getOutputStream()); dis = new DataInputStream(s.getInputStream()); System.out.println("connected!"); bConnected = true; } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
}
public void disconnect() { try { dos.close(); dis.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } } private class TFListener implements ActionListener {
public void actionPerformed(ActionEvent e) { String str = tfTxt.getText().trim(); //taContent.setText(str); tfTxt.setText("");
try { //System.out.println(s); dos.writeUTF(str); dos.flush(); //dos.close(); } catch (IOException e1) { e1.printStackTrace(); }
}
}
private class RecvThread implements Runnable {
public void run() { try { while (bConnected) { String str = dis.readUTF(); //System.out.println(str); taContent.setText(taContent.getText() + str + '\n'); } } catch (SocketException e) { System.out.println("退出了,bye!"); } catch (EOFException e) { System.out.println("推出了,bye - bye!"); } catch (IOException e) { e.printStackTrace(); }
}
} }