*
* @throws java.lang.Exception */
private void jbInit() throws Exception { contentPane = (JPanel) getContentPane(); contentPane.setLayout(null); setTitle(\聊天界面\
this.setResizable(false);
setSize(new Dimension(602, 515)); frame.setVisible(true);
jScrollPane1.setBounds(new Rectangle(2, 2, 445, 320)); jScrollPane2.setBounds(new Rectangle(1, 333, 448, 95)); jButton1.setBounds(new Rectangle(93, 441, 78, 31)); jButton1.setText(\发送\
jButton2.setBounds(new Rectangle(185, 441, 76, 31)); jButton2.setText(\清空\
jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this)); jTextArea1.setEditable(false);
jScrollPane3.setBounds(new Rectangle(458, 6, 139, 424));
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this)); jTextArea2.addKeyListener(new Frame1_jTextArea2_keyAdapter(this)); contentPane.add(jScrollPane2);
jScrollPane2.getViewport().add(jTextArea2); contentPane.add(jScrollPane1, null);
jScrollPane1.getViewport().add(jTextArea1); contentPane.add(jScrollPane3); contentPane.add(jButton1); contentPane.add(jButton2);
jScrollPane3.getViewport().add(jList1); this.setVisible(false); try {
InetAddress address=InetAddress.getLocalHost();
socket = new Socket(address.getHostAddress(), port); in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream()); } catch (Exception e) { setVisible(true);
jTextArea2.setText(\无法与服务器联接,请退出...\}
if (thread == null) {
thread = new Thread(this); thread.start(); }
frame.setClection(socket, in, out);
}
public boolean setClection1() {
frame.setClection(socket, in, out); return frame.bool; }
public void setClection2() { wenBen = jTextArea2.getText(); if (wenBen.equals(\
jTextArea2.setText(\return; }
try {
out.writeUTF(frame.name + \jTextArea2.setText(\} catch (Exception ee) { } }
public void run() { String sl = null; String ss = null; String s = null; while (true) { try {
sl = in.readUTF();
} catch (Exception ee) { vector.removeAllElements(); jList1.setListData(vector);
jTextArea2.setText(\巳经与服务器断开...\return; }
if(sl.startsWith(\可以注册\frame.setVisible(false); setVisible(true);
setTitle(\昵称...\(见教材) }
else if(sl.startsWith(\该用户名已注册\
frame.jTextField1.setText(\请重新输入昵称\continue; }
else if (sl.startsWith(\新用户\
StringTokenizer st = new StringTokenizer(sl, \ss = null; s = null;
ss = st.nextToken(); s = st.nextToken();
vector.addElement(s);
jList1.setListData(vector); continue; }
else if (sl.startsWith(\下线了\
StringTokenizer st = new StringTokenizer(sl, \ss = null; s = null;
ss = st.nextToken(); s = st.nextToken();
vector.removeElement(s); jList1.setListData(vector); continue; }
jTextArea1.append(sl + \} }
public void jButton1_actionPerformed(ActionEvent e) { setClection2(); }
public void jButton2_actionPerformed(ActionEvent e) { jTextArea1.setText(\}
public void jTextArea2_keyPressed(KeyEvent e) {
if(e.isControlDown() &&e.getKeyCode()==KeyEvent.VK_ENTER ){ setClection2(); } } }
class Frame1_jTextArea2_keyAdapter extends KeyAdapter { private Frame1 adaptee;
Frame1_jTextArea2_keyAdapter(Frame1 adaptee) { this.adaptee = adaptee; }
public void keyPressed(KeyEvent e) { adaptee.jTextArea2_keyPressed(e); } }
class Frame1_jButton2_actionAdapter implements ActionListener { private Frame1 adaptee;
Frame1_jButton2_actionAdapter(Frame1 adaptee) { this.adaptee = adaptee; }
public void actionPerformed(ActionEvent e) { adaptee.jButton2_actionPerformed(e);
} }
class Frame1_jButton1_actionAdapter implements ActionListener { private Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) { this.adaptee = adaptee; }
public void actionPerformed(ActionEvent e) { adaptee.jButton1_actionPerformed((见教材)); } }
四、 结论
客户端/服务器模式程序设计中,服务器使用ServerSocket监听指定端口,端口可以随意指定,等待客户连接请求,客户连接以后,会话产生,完成会话后,关闭连接。客户端使用Socket对网络上某一个指定IP的服务器上的端口发出连接请求,一旦连接成功,打开会话,会话完成后,关闭Socket,客户端自身不需要指定端口,通常会临时、动态地分配一个1024以上的端口供其与服务器连接。
五、 问题与讨论
在网络上实际应用的聊天活动,并不是在客户端与服务器之间进行聊
天,而是在客户端之间进行聊天通信。服务器主程序监听一端口,等待客户接入,同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。而线程将接收到的信息转给所有与之连接的客户。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库JAVA实验报告4-远程数据传输(3)在线全文阅读。
相关推荐: