1. 編程原理
1.1服務(wù)器端
(1) 創(chuàng)建ServerSocket對(duì)象,綁定監(jiān)聽端口捞镰;
(2) 通過accept()方法監(jiān)聽客戶端請(qǐng)求闸与;
(3) 連接建立后,通過輸入流讀取客戶端發(fā)送的請(qǐng)求信息岸售;
(4) 通過輸出流向客戶端發(fā)送相應(yīng)信息践樱;
(5) 關(guān)閉響應(yīng)資源。
1.2 客戶端
(1) 創(chuàng)建Socket對(duì)象凸丸,指明需要連接的服務(wù)器地址和端口拷邢;
(2) 連接建立后,通過輸出流向服務(wù)器端發(fā)送請(qǐng)求信息屎慢;
(3) 通過輸入流獲取服務(wù)器端返回的響應(yīng)信息瞭稼;
(4) 關(guān)閉響應(yīng)資源。
2. 編程實(shí)現(xiàn)
2.1 服務(wù)器端
<code>
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestSocketServer {
public static void main(String[] args) {
InputStream in = null;
OutputStream out = null;
try{
ServerSocket ss = new ServerSocket(5888);//創(chuàng)建ServerSocket對(duì)象腻惠,綁定監(jiān)聽端口
Socket socket = ss.accept();//接受來自客戶端的請(qǐng)求
in = socket.getInputStream();//得到來自客戶端寫入的數(shù)據(jù)
out = socket.getOutputStream();//服務(wù)器端輸出流對(duì)象
DataOutputStream dos = new DataOutputStream(out);
DataInputStream dis = new DataInputStream(in);
String s =null;//定義從客戶端讀出的字符串
//如果讀出的不為空的話环肘。向客戶端發(fā)出本機(jī)的ip地址和連接的端口號(hào)
if((s = dis.readUTF()) != null){
System.out.println(s);
System.out.println("from: " + socket.getInetAddress());
System.out.println("port: " + socket.getPort());
}
dos.writeUTF("hello success");//向客戶端寫入
dis.close();//關(guān)閉流對(duì)象
dos.close();
socket.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
</code>
2.2 客戶端
<code>
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class TestSocketClient {
public static void main(String[] args) {
InputStream is = null;
OutputStream os = null;
try{
Socket socket = new Socket("localhost", 5888);//創(chuàng)建Socket對(duì)象,指明需要連接的服務(wù)器的地址和端口號(hào)
is = socket.getInputStream();
os = socket.getOutputStream();
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("hello");//連接建立后集灌,通過輸出流向服務(wù)器端發(fā)送請(qǐng)求信息
String s = null;
if((s = dis.readUTF()) != null){
System.out.println(s);//通過輸入流獲取服務(wù)器響應(yīng)的信息
}
dos.close();
dis.close();
socket.close();
} catch (UnknownHostException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
}
</code>