Java網路簡單C/S程式設計
阿新 • • 發佈:2019-02-09
1.伺服器例項化一個ServerSocket物件,指示通訊將產生在哪個埠號;
2.伺服器呼叫ServerSocket類的accept()方法.這個方法等待直到一個客戶端在給定的埠上連線到伺服器。
3.伺服器在等待後, 一個客戶端例項化一個Socket物件,指定伺服器名稱和連線的埠號;
4.Socket類的建構函式努力將客戶端連線到指定的伺服器和埠號。如果通訊建立,客戶端現在就擁有了一個能和伺服器通訊的Socket物件
5.在伺服器端,accept()方法子伺服器上返回一個連線到客戶端套接字的新的套接字。
在連線建立後,通訊可以使用I/O流產生。每個套接字都有一個輸出流和一個輸入流。客戶端的輸出流連線到伺服器端的輸入流,客戶端的輸入流連線到伺服器段的輸入流。
伺服器端
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class CS_Server {
public static void main(String[] args){
System.out.print("輸入埠號:");
Scanner input = new Scanner(System.in);
try{
Thread t = new MyServer(input.nextInt());
t.start();
}catch (Exception e){
e.printStackTrace();
}
input.close();
}
}
class MyServer extends Thread{
private ServerSocket serverSocket;
MyServer(int port) throws IOException{
//建立一個ServerSocket並繫結埠
serverSocket = new ServerSocket(port);
//設定堵塞超時時間,不設定則認為一直堵塞,直到接受到客戶端連線
serverSocket.setSoTimeout(90000);
}
public void run(){
Socket client_socket;
System.out.println("伺服器地址:"+serverSocket.getLocalSocketAddress().toString());
while(true){
try{
System.out.println("等待伺服器的埠"+serverSocket.getLocalPort()+"...");
//例項化一個Socket,並接受ServerSocket 從客戶端獲取的資訊
client_socket=serverSocket.accept();
System.out.println("正在連線 "+client_socket.getRemoteSocketAddress().toString());
//獲取輸入流物件
//輸入流物件 打包 成 資料輸入流物件
DataInputStream in=new DataInputStream(client_socket.getInputStream());
//輸入
System.out.println(in.readUTF());
//獲取輸出流物件
//輸出流物件 打包 到資料輸出流物件
DataOutputStream out = new DataOutputStream(client_socket.getOutputStream());
//輸出
out.writeUTF("Hello from "+client_socket.getLocalAddress());
client_socket.close();
}catch(IOException e){
System.out.println(e);
}
}
}
}
流程圖
客戶端
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class CS_Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print("輸入伺服器地址:");
Scanner a = new Scanner(System.in);
String serverAddress=a.nextLine();
System.out.print("輸入伺服器埠:");
int serverPort=a.nextInt();
a.close();
Socket client;
try{
//例項化Socket 並繫結伺服器地址及其埠
client = new Socket(serverAddress,serverPort);
System.out.println("連線到伺服器!");
//Socket物件 獲取輸出流物件 並打包到 輸出流物件中
//輸出流物件 打包 到 資料輸出流的物件中
DataOutputStream out = new DataOutputStream(client.getOutputStream());
//writeUTF 將內容已UTF8形式,通過管道,進行傳輸
out.writeUTF("Hello from "+client.getLocalAddress().toString());
// 獲取輸入流物件
// 輸入流物件 打包到 資料輸入流物件中
DataInputStream inputStream = new DataInputStream(client.getInputStream());
//輸出 獲取的內容
System.out.println("Server says:"+inputStream.readUTF());
//關閉客戶端
client.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
流程圖