Java-TCP程式編寫(TCP客戶端和服務端)
阿新 • • 發佈:2018-12-23
1.TCP服務端的程式編寫
package test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class MyTcp{ private BufferedReader reader; private ServerSocket serverSocket; private Socket socket; /** * 建立服務端的程式,讀取客戶端傳來的資料 */ void getserver(){ try { serverSocket = new ServerSocket(8998); //例項化服務端socket System.out.println("伺服器套接字已經建立成功"); while (true) { System.out.println("等待客戶機的連線:"); socket = serverSocket.accept(); //例項化socket物件 reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); //例項化BufferReader物件 getClientMessage(); } } catch (Exception e) { e.printStackTrace(); } } private void getClientMessage() { try { while (true) { System.out.println("客戶機傳來的資訊是:"+reader.readLine()); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { MyTcp myTcp = new MyTcp(); //建立本類物件 myTcp.getserver(); } }
2.TCP客戶端程式編寫
package test; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.PrintWriter; import java.net.Socket; import java.nio.channels.WritableByteChannel; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.border.BevelBorder; public class MyTcpClient extends JFrame{ private PrintWriter printWriter; Socket socket; private JTextField jTextField = new JTextField(); private JTextArea jTextArea = new JTextArea(); Container container; /** * 建立的Tcp客戶端程式 */ public MyTcpClient (String title) { super(title); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); container = this.getContentPane(); final JScrollPane jScrollPane = new JScrollPane(); jScrollPane.setBorder(new BevelBorder(BevelBorder.RAISED)); //顯示邊框 getContentPane().add(jScrollPane,BorderLayout.CENTER); jScrollPane.setViewportView(jTextArea); container.add(jTextField,"South"); //將文字框放在窗體下面 jTextField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { printWriter.println(jTextField.getText()); //將文字框的資訊寫入流(為下面的輸出流寫入資訊做準備) jTextArea.append(jTextField.getText() + "\n"); jTextArea.setSelectionEnd(jTextArea.getText().length()); jTextField.setText(null); } }); } private void connect() { jTextArea.append("嘗試連線中...\n"); try { socket = new Socket("127.0.0.1",8998); printWriter = new PrintWriter(socket.getOutputStream(),true); //將printwriter中的資訊流寫入到套接字的輸出流傳送給服務端 jTextArea.setText("已完成連線\n\n"); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { MyTcpClient myTcpClient = new MyTcpClient("向伺服器傳送資料"); myTcpClient.setSize(500,200); myTcpClient.setVisible(true); myTcpClient.connect(); } }
3.效果展示
<1>先將服務端的程式跑起來
<2>再將客戶端的程式跑起來
<3>.客戶端和服務端進行互動