1.Java網絡程式設計——建立Socket連接配接
基于Tcp協定的程式設計:
服務端和用戶端
服務端:建立ServerSocket對象,綁定要監聽的端口。
用戶端:建立Socket(網絡套接字),給出要通路的服務端ip,以及端口号port。
下面給出一段代碼示範
服務端代碼示例
package server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Mysever {
public static void main(String[] args) throws IOException {
//建立服務端對象,綁定4574端口。
ServerSocket serv =new ServerSocket(4574);
System.out.println("伺服器啟動成功,等待使用者接入");
//accept()等待使用者接入,如果沒有使用者連接配接,會一直等待。
//有客戶連接配接後,accept()方法會傳回一個Socket對象,代表用戶端
Socket sc=serv.accept();
System.out.println("有用戶端接入,用戶端ip:"+sc.getInetAddress());
}
}
用戶端代碼示例
package server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Mysever {
public static void main(String[] args) throws IOException {
//建立服務端對象,綁定4574端口。
ServerSocket serv =new ServerSocket(4574);
System.out.println("伺服器啟動成功,等待使用者接入");
//accept()等待使用者接入,如果沒有使用者連接配接,會一直等待。
//有客戶連接配接後,accept()方法會傳回一個Socket對象,代表用戶端
Socket sc=serv.accept();
System.out.println("有用戶端接入,用戶端ip:"+sc.getInetAddress());
}
}
先運作服務端代碼,再運作用戶端代碼。
運作服務端(用戶端還未運作)
伺服器啟動成功,等待使用者接入
運作用戶端
伺服器啟動成功,等待使用者接入
有用戶端接入,用戶端ip:/192.168.0.104
切換到服務端控制視窗
服務端結果
伺服器啟動成功,等待使用者接入
有用戶端接入,用戶端ip:/192.168.0.104
2.Socket基本流資料傳輸(用戶端和服務端進行資料傳輸的基本操作)
getInputStream():傳回網絡輸入流InputStream,可以接收來自網絡的資料
getOutputStream():傳回值為網絡輸出流 OutputStream,可以将資料發送到網絡上
write(byte[]):寫
read(byte[]):讀
服務端代碼
package server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Mysever {
public static void main(String[] args) throws IOException {
//建立服務端對象,綁定4574端口。
ServerSocket serv =new ServerSocket(4574);
System.out.println("伺服器啟動成功,等待使用者接入");
//accept()等待使用者接入,如果沒有使用者連接配接,會一直等待。
//有客戶連接配接後,accept()方法會傳回一個Socket對象,代表用戶端
Socket sc=serv.accept();
System.out.println("有用戶端接入,用戶端ip:"+sc.getInetAddress());
//從Socket中得到網絡輸入流,接收來自網絡的資料
InputStream in=sc.getInputStream();
//從Socket中得到網絡輸出流,将資料發送到網絡上
OutputStream out=sc.getOutputStream();
//接收用戶端發來的資料
byte[] bs=new byte[1024];
//将資料存入bs數組中,傳回值為數組的長度
int len=in.read(bs);
String str=new String(bs,0,len);
System.out.println("來自用戶端的消息: "+str);
//向用戶端寫資料,注意用戶端代碼中别忘記寫read()方法,否則會抛異常
out.write("歡迎通路,你好,我是服務端".getBytes());
System.out.println("服務端正常結束");
//關閉流!
sc.close();
}
}
用戶端代碼
package cli;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 下面編寫用戶端,此時,不需要關心用戶端位址。
* 隻需要關心服務端ip位址,這樣才能連接配接伺服器。
* 服務端的端口号也需要知道。
*
*/
public class MyClient {
public static void main(String[] args) throws UnknownHostException, IOException {
//建立Socket連接配接,new Socket(服務端ip,端口port);
Socket so=new Socket("192.168.0.104",4574);
System.out.println("連接配接伺服器成功");
//從Socket中得到網絡輸入流,接收來自網絡的資料
InputStream in=so.getInputStream();
//從Socket中得到網絡輸出流,将資料發送到網絡上
OutputStream out=so.getOutputStream();
//write方法中隻能為byte[],或者int。
//若服務端沒有read(),則用戶端會一直等。即停留在write方法中。
out.write("你好,我是用戶端".getBytes());
//接收服務端發來的資料
byte[] bs=new byte[1024];
//将資料存入bs數組中,傳回值為數組的長度
int len=in.read(bs);
String str=new String(bs,0,len);
System.out.println("來自服務端的消息: "+str);
//關閉流
so.close();
}
}
用戶端運作結果
連接配接伺服器成功
來自服務端的消息: 歡迎通路,你好,我是服務端
服務端運作結果
伺服器啟動成功,等待使用者接入
有用戶端接入,用戶端ip:/192.168.0.104
來自用戶端的消息: 你好,我是用戶端
服務端正常結束