最近這段時間因爲公司的業務沒有那麼的緊,所以也會偶爾有一些自己的自由時間去做自己想做的事,最近也一直在琢磨socket 然後就寫了一個詳細易懂的demo分享給大家
在這裏呢 那些tcp,udp的區別和什麼tcp三次握手我這裏就不說了(主要我現在也不太懂)百度一下你就知道
好了 廢話不多 直接開始:
首先來一個流程圖 根據這個圖片就可以清楚知道使用TCP協議進行通信的實現的過程
然後再來一個簡單卻不失詳細的demo
這裏服務端的實現我用的是eclipse進行實現的
public class SocketServiceTcp {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("開始了臭弟弟:");
try {
//1.創建一個服務器端Socket,即ServerSocket,指定綁定的端口,並監聽此端口
ServerSocket serverSocket = new ServerSocket(12345);
Socket socket = null;
//2.調用accept()等待客戶端連接
System.out.println("~~~服務端已就緒,等待客戶端接入");
socket = serverSocket.accept();
//3.連接後獲取輸入流,讀取客戶端信息
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
is = socket.getInputStream(); //獲取輸入流
isr = new InputStreamReader(is,"UTF-8");
br = new BufferedReader(isr);
String info = null;
while((info=br.readLine())!=null){//循環讀取客戶端的信息
System.out.println("客戶端發送過來的信息" + info);
}
socket.shutdownInput();//關閉輸入流
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
}
Android客戶端的實現
btna.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Socket socket = new Socket("192.168.30.83",12345);
OutputStream os = socket.getOutputStream();
os.write("弟弟救我".getBytes());
OutputStreamWriter writer = new OutputStreamWriter(os,"UTF-8");
writer.flush();
socket.shutdownOutput();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
});
實現的效果:
這就完成了客戶端往服務器端發送數據