}
}
public static void main (String[] args) throws Exception{ new Server();
}
}
//客户端
import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.net.Socket; import java.io.*;
class Client extends JFrame implements ActionListener{ private JTextArea jta = new JTextArea(); private JTextField jtf = new JTextField(); private String nick;
private PrintStream ps = null; private BufferedReader br = null; public Client() {
this.add(jta,BorderLayout.CENTER); jta.setFont(new
\
Font(\
宋
体
this.add(jtf,BorderLayout.SOUTH); jtf.setFont(new Font(\宋体
\
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle(\客户端\ this.setVisible(true); jtf.addActionListener(this); try{
nick = JOptionPane.showInputDialog(\请输入你的名称\
this.setTitle(nick);
}
class ReceiveThread extends Thread{
public void run(){
while(true){ }
try{String msg = br.readLine();
jta.append(msg + \}catch(Exception ex){}
Socket s = new Socket(\ps = new PrintStream(s.getOutputStream());
br = new BufferedReader(new InputStreamReader(s.getInputStream())); ps.println(nick+\成功上线!\new ReceiveThread().start();
}catch(Exception ex){}
}
}
}
public void actionPerformed(ActionEvent e) { }
public static void main (String[] args) throws Exception{ }
new Client();
ps.println(nick +\
六、实验总结
Socket通信是网络通信中的重要环节,本实验中主要实现了TCP/IP的通信,传递相应的信息来完成各种不同的交互功能。聊天工具功能很强大,看起来很复杂,其实底层最基本的实现原理都是一样的。基于TCP/IP协议的连接是比较可靠的,它先通过“三次握手”建立彼此间的一条通路,之后,两者就可以通过这条通路有效地传递信息了。另一方面,两端要传送信息时,也可以通过第三方来转发,这样,我们就可以把各种连接都建立到同一个端点上,构成一个星形的结构,然后通过这个端点的转发,就可以任何两端之间的通信。 聊天的实现:
客户端向服务器发送一个消息包,里面包含了消息类型、接收人和发送人等信息,服务器接到的时候先判断,如果是聊天消息,就取出其中的接收人信息,并在自己的线程池里面查找相应的线程,找到
时把消息(包含发送人和消息内容等)通过这个线程发送出去。这样对方就可以接到这个消息。对方如果要回复的话,也可以把发送人和接收人及聊天消息等信息包装起来发送给服务器,服务器再用之前一样的方法来处理这个信息,这样的话,双方就可以通过服务器实现单聊了。
七、实验心得
此次实验是对Socket的一个应用,让我更深的了解了Socket函数的作用及使用方法。实验过程中遇到了很多的问题。然基本功能已经实现,没有实现群组建立和通信,还是需要以后多加学习的。 Java提供Socket类使得TCP连接的通信十分方便,在实现通信过程的时候,最主要的是理解Java中的各种输入输出流类型起到的作用。