標籤:
在《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. 運行效果
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【Java基礎學習筆記】Java中Socket+Swing設計簡單通訊