【Java基础学习笔记】Java中Socket+Swing设计简单通信

来源:互联网 发布:mysql ant value 编辑:程序博客网 时间:2024/05/13 14:07

在《Java从入门到精通(第3版)》的原书中,客户端仅能发送一次数据,我在此基础上修改了一点点,实现了多次发送数据的单向通讯。

1. 服务器端

package Tcp_IP;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;import java.sql.Date;import java.sql.Time;import java.text.SimpleDateFormat;import java.util.SimpleTimeZone;import com.sun.org.apache.bcel.internal.generic.NEW;import javafx.beans.binding.When;import IO_Test.bufferread;public class My_Server {private BufferedReader reader;private ServerSocket Ser_Sock;private Socket socket;void My_Server() {// TODO Auto-generated constructor stubtry {Ser_Sock = new ServerSocket(8766);System.out.println("等待客户连接中···");socket = Ser_Sock.accept();reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));while(reader!=null){SimpleDateFormat forma = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");System.out.println("连接成功:"+forma.format(new java.util.Date()));System.out.println("获得客户端信息为:"+reader.readLine());}reader.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} }public static void main(String[] args) {// TODO Auto-generated method stubMy_Server SV = new My_Server();SV.My_Server();}}

2. 客户端

package Tcp_IP;import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.border.BevelBorder;public class My_Client extends JFrame{Socket socket;private JTextArea ta = new JTextArea();private JTextField tf = new JTextField();private PrintWriter writer;Container c;public My_Client(String titl) {// TODO Auto-generated constructor stubsuper(titl);setDefaultCloseOperation(EXIT_ON_CLOSE);c = getContentPane();final JScrollPane  scollpane = new JScrollPane();scollpane.setBorder(new BevelBorder(BevelBorder.RAISED));getContentPane().add(scollpane, BorderLayout.CENTER);scollpane.setViewportView(ta);c.add(tf, "South");ta.append("尝试连接\n");try {socket = new Socket("127.0.0.1", 8766);} catch (UnknownHostException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}ta.append("已连接,请输入发送信息\n");tf.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubtry {writer = new PrintWriter(socket.getOutputStream(), true);writer.println(tf.getText());ta.append(tf.getText()+"\n");ta.setSelectionEnd(tf.getText().length());tf.setText("");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});}public static void main(String[] args) {// TODO Auto-generated method stubMy_Client client = new My_Client("连接服务器");client.setSize(200, 200);client.setVisible(true);}}

3. 运行效果










0 0