//server代码
package webChatingDemo;
import java.net.*;
import java.io.*;
public class ChatServer {
public static final int PORT=1991;
private ServerSocket serverSocket;
public ChatServer()throws IOException{
serverSocket=new ServerSocket(PORT);
System.out.println("ChatServer started!");
}
private PrintWriter getWriter(Socket socket)throws IOException{
OutputStream out=socket.getOutputStream();
return new PrintWriter(out,true);
}
private BufferedReader getReader(Socket socket)throws IOException{
InputStream in=socket.getInputStream();
return new BufferedReader(new InputStreamReader(in));
}
public void service(){
Socket socket1=null,socket2=null;
try{
socket1=serverSocket.accept();
socket2=serverSocket.accept();
System.out.println("New connection accepted"+socket1.getInetAddress()+":"+socket1.getPort());
System.out.println("New connection accepted"+socket2.getInetAddress()+":"+socket2.getPort());
BufferedReader read1=getReader(socket1);
BufferedReader read2=getReader(socket2);
PrintWriter writer1=getWriter(socket1);
PrintWriter writer2=getWriter(socket2);
String msg1=null,msg2=null;
while(true){
msg1=read1.readLine();
if(msg1!=null){
System.out.println("msg1:"+msg1);
writer2.println("message from client1: "+msg1);
//writer2.println(msg1);
}
msg2=read2.readLine();
if(msg2!=null){
System.out.println("msg2:"+msg2);
writer1.println("message from client2: "+msg2);
//writer1.println(msg2);
}
if(msg1.equals("bye")&&(msg2.equals("bye"))){
break;
}
}
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException{
new ChatServer().service();
}
}
//client代码
package webChatingDemo;
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatClient extends JFrame implements ActionListener{
private String host="localhost";
private Socket socket;
JPanel pan=new JPanel();
JButton btn=new JButton("send");
JTextField tfield=new JTextField(100);
public ChatClient(String name)throws IOException{
//初始化对话框
super(name);
btn.addActionListener(this);
pan.setLayout(new BorderLayout());
pan.add(btn,BorderLayout.SOUTH);
pan.add(tfield,BorderLayout.CENTER);
this.add(pan);
this.setBounds(100, 100, 300, 200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
socket=new Socket(host,ChatServer.PORT);
//开启接收消息的线程
Thread t=new ChatThread();
t.start();
}
public void actionPerformed(ActionEvent event){
try{
BufferedReader reader=getReader(socket);
PrintWriter writer=getWriter(socket);
//BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));
String msg=null;
//msg=localReader.readLine();
msg=tfield.getText();
writer.println(msg);
//System.out.println(reader.readLine());
}catch(IOException e){
e.printStackTrace();
}
}
class ChatThread extends Thread{
public void run(){
while(true){
try {
getMsg();
} catch (IOException e) {
e.printStackTrace();
}
try {
sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void getMsg() throws IOException{
BufferedReader reader=getReader(socket);
String msg=null;
if((msg=reader.readLine())!=null){
tfield.setText(msg);
}
}
private BufferedReader getReader(Socket socket)throws IOException{
InputStream in=socket.getInputStream();
return new BufferedReader(new InputStreamReader(in));
}
private PrintWriter getWriter(Socket socket)throws IOException{
OutputStream out=socket.getOutputStream();
return new PrintWriter(out,true);
}
public static void main(String[] args)throws IOException{
new ChatClient("Client1");
new ChatClient("Client2");
}
}
基于socket和thread写的入门级简易聊天工具
最新推荐文章于 2024-03-27 22:57:21 发布