Socket通信客户端设计(Java)

时间:2023-03-08 19:45:35
Socket通信客户端设计(Java)
 public class Client extends JFrame implements Runnable{

     private JPanel jPanel= new JPanel();
private JLabel jLabel1=new JLabel("姓名: ");
private JLabel jLabel2=new JLabel("端口: ");
private JTextField jTextField1=new JTextField();
private JTextField jTextField2=new JTextField();
private JTextArea jTextArea=new JTextArea();
private JTextField jTextField3=new JTextField();
private JButton jButton=new JButton("发送(S)"); private JScrollPane jScrollPane=new JScrollPane();
private BufferedReader bufferedReader;
private PrintWriter printWriter;
private Socket socket; private static String title="劲爆聊天室"; public Client(String port,String name){
super(title+":"+name);
this.setSize(377,387);
this.add(jPanel);
jPanel.setLayout(null);
jTextArea.setEditable(false);
//
jPanel.add(jLabel1);
jLabel1.setBounds(10, 10, 60, 20);
jTextField1.setText(name);
jTextField1.setEditable(false);
jPanel.add(jTextField1);
jTextField1.setBounds(60, 10, 60, 21); jPanel.add(jLabel2);
jLabel2.setBounds(125, 10, 60, 20);
jTextField2.setText(port);
jTextField2.setEditable(false);
jPanel.add(jTextField2);
jTextField2.setBounds(190, 10, 60, 21);; jPanel.add(jTextField3);
jTextField3.setBounds(10, 270, 320, 21); jTextArea.setColumns(20);
jTextArea.setRows(5); jTextArea.setEditable(false);
jScrollPane.setViewportView(jTextArea);
jPanel.add(jScrollPane);
jScrollPane.setBounds(10, 42, 320, 220); jPanel.add(jButton);
jButton.setBounds(250, 300, 80, 22);
jButton.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jButton){
printWriter.println(jTextField1.getText()+": "+jTextField3.getText());
jTextField3.setText("");
}
}
});
//Jtextfield不好控制啊。。。。
/* jTextField3.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
printWriter.println(jTextField1.getText()+":"+jTextField3.getText());
jTextField3.setText("");
}
});*/
getSocket();
}
@Override
public void run(){
while(true)
{
try {
jTextArea.append(bufferedReader.readLine()+"\n"); } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
} public void getSocket(){
jTextArea.append("正在与劲爆聊天室进行连接..."+"\n");
try {
socket=new Socket("127.0.0.1",PortNumber.PORT.getNumber());
jTextArea.append("劲爆聊天开始..."+"\n");
bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
printWriter=new PrintWriter(socket.getOutputStream(),true);
new Thread(this).start();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} }

考虑到多客户端,此处用到了多线程。Socket确实有意思....

非常感叹T公司如果把一个IM软件,做到亿级用户量,如何解决并发,如何解决Server的及时回应,如何完成数据存储...

想不出来了...