基于socket和thread写的入门级简易聊天工具

//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");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值