初學了Socket編程,有什麼不對的地方,請多多指教。
學習了一下Socket,爲了方便以後複習,就寫了這篇博客。
理論的就不多講了,初學了一下socket,就寫了一個例子,一個客戶端,一個服務器端。
服務器端:
package com.seehope.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
//服務器端,多線程併發實現多個客戶端請求服務器
public class ServerThread extends Thread {
private Socket sk;
//構造方法
public ServerThread(Socket sk) {
this.sk = sk;
}
@Override
public void run() {
InputStream in = null;
OutputStream os = null;
PrintStream ps = null;
BufferedReader br = null;
try {
//獲得輸入輸出低端流
in = sk.getInputStream();
os = sk.getOutputStream();
br = new BufferedReader(new InputStreamReader(in));
//輸出流,輸出的是字節流,若要輸出字符,使用PrintWriter。PrintStream 永遠不會拋出 IOException
ps = new PrintStream(os);
boolean flag = true;
while(flag){
String line = br.readLine();
ps.println("服務器說:"+line);
if("bye".equals(line)){
flag = false;
}
//返回給客戶端
ps.flush();
}
ps.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException{
Socket socket = null;
ServerSocket serverSocket = new ServerSocket(8899);
System.out.println("服務器正在監聽...");
while(true){
socket = serverSocket.accept();//阻塞,監聽客戶端的請求
System.out.println(socket.getRemoteSocketAddress()+" 鏈接成功!");
ServerThread st = new ServerThread(socket);
//啓動線程
st.start();
}
}
}
客戶端:
package com.seehope.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
//客戶端
public class ClientSocket {
public static void main(String[] args) {
InputStream in = null;
OutputStream os = null;
PrintStream ps = null;
BufferedReader br = null;
System.out.println("------客戶端程序-----");
try {
//創建socket實例,設置ip地址和要監聽的端口
Socket socket = new Socket("127.0.0.1",8899);
os = socket.getOutputStream();
ps = new PrintStream(os);
in = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(in));
String line = null;
boolean flag = true;
while(flag){
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入信息:");
line = scanner.nextLine();
if("bye".equals(line)){
flag = false;
}
ps.println(line);//寫給服務器
ps.flush();
//讀取服務器返回的內容
System.out.println(br.readLine());
}
ps.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}