今天才開始接觸java網絡編程,作爲一個程序菜鳥,只是基本的學習了一下ServerSocket和Socket,估計連皮毛都算不上,唉,一步一步網上爬。。。
模擬服務器使用了ServerSocket對本機的9999端口進行監聽,而使用Socket模擬客戶端與9999端口服務器進行通信,交換數
(PS:可以在cmd中使用netstat -an來查看端口使用情況,也可以使用netstat -anb來檢查端口使用詳情,注意以管理員身份運行cmd)
代碼如下:
服務器:
//定義一個服務器 監聽9999端口
package ServerTest1;
import java.io.*;
import java.net.*;
public class MyServer1 {
public MyServer1(){
try {
//用ServerSocket在9999端口進行監聽
ServerSocket ss = new ServerSocket(9999);
System.out.println("我是服務器,我在9999端口進行監聽");
//等待某個客戶端程序來連接,該函數會返回一個socket連接
//等待過程中程序會在下面一行代碼卡住,直到有客戶端進程連接
Socket s = ss.accept();
System.out.println("連接建立");
//連接成功後 接收數據
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
System.out.println("我是服務器,我接受到了數據:"+br.readLine());
//服務器接受到數據後,反饋數據給客戶端
//需要定義服務器自己的PrintWriter
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
pw.println("客戶端你好,我是服務器");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer1 ms = new MyServer1();
}
}
客戶端://定義一個客戶端,用於與9999端口的服務器程序進行連接交互
package ClientTest1;
import java.io.*;
import java.net.*;
public class MyClient1 {
public MyClient1(){
try {
//使用Socket與本機9999端口連接
Socket s = new Socket("127.0.0.1",9999);
//連接成功後 向服務器發送數據
//我們通過pw來向s寫入數據 true代表即時刷新
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
pw.println("服務器你好,我是客戶端^_^");
//接受來自服務器的反饋
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
System.out.println("我是客戶端,收到反饋:"+br.readLine());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyClient1 mc = new MyClient1();
}
}
運行效果:
服務器:
客戶端: