1. 程式人生 > >socket程式設計的一個簡單的hello world程式

socket程式設計的一個簡單的hello world程式

一些理論的東西,我在這裡一概不提,我們先看例子程式,關於理論的部分,我會在後續的部落格中會進行詳細的說明。

首先我們來看一個socket的一個簡單的hello world程式,

我們首先來完成第一個需求:

(1) 讓客戶端和伺服器端建立起連線

那麼我們必須要有一個客戶端程式(TCPClient),一個伺服器端程式(TCPServer),我們的專案結構如下:

程式碼思想: 編寫socket程式和其他程式不一樣,關於我們socket程式,服務端和客戶端程式碼需要同時編寫,但是執行的時候,必須先要執行伺服器端程式碼,然後再執行客戶端程式碼,這是因為客戶端是請求的發起者,伺服器端是請求的接受者,只有接受者是活躍的狀態,請求發起才具有實際的意義。

package com.niepengfei.server;

import java.net.ServerSocket;

public class TCPServer {

    public static void main(String[] args) throws Exception {
		
    	ServerSocket ss = new ServerSocket(6666);
        Socket s = ss.accept();
        System.out.println("A client connect.");
    }
		
}

package com.niepengfei.client;

import java.net.Socket;


public class TCPClent {
	
    public static void main(String[] args) throws Exception {
    	Socket s = new Socket("127.0.0.1", 6666);
    }
    
}

以上程式碼的含義如下:

我們首先執行TCPServer:


再執行TCPClient,(請注意控制檯)

(2) 現在客戶端和伺服器端已經建立起連線了,那麼現在我們讓客戶端向伺服器端傳入一段字串。

package com.niepengfei.client;

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;


public class TCPClent {
	
    public static void main(String[] args) throws Exception {
    	Socket s = new Socket("127.0.0.1", 6666);
    	OutputStream out = s.getOutputStream();
    	DataOutputStream dos = new DataOutputStream(out);
    	dos.writeUTF("hello server.");
    	dos.flush();
    	dos.close();
    	s.close();
    }
    
}
package com.niepengfei.server;

import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

    public static void main(String[] args) throws Exception {
		
    	ServerSocket ss = new ServerSocket(6666);
    	while(true){
    		Socket s = ss.accept();
        	System.out.println("A client connect.");
        	InputStream input = s.getInputStream();
        	DataInputStream dai = new DataInputStream(input);
        	System.out.println(dai.readUTF());
    	}
    }
		
}

執行伺服器端:

執行客戶端(注意控制檯):