1. 程式人生 > >Java-TCP程式編寫(TCP客戶端和服務端)

Java-TCP程式編寫(TCP客戶端和服務端)

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>.客戶端和服務端進行互動
在這裡插入圖片描述