//先啓動服務端,創建8888端口號(一般採用系統1023之後的),監聽,如果存在通信返回socket,獲得該socket字節流,轉化爲字符流並用bufferedreader緩衝,隨後打印出服務端接收到的信息,同時回覆客戶端信息,最後關閉資源。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
//服務端
public class server {
public static void main(String []args){
try {
//1創建一個服務器端socket,即serversocket
ServerSocket serversocket=new ServerSocket(8888);
//2,調用accept的方法進行監聽,這邊會阻塞
Socket socket=serversocket.accept();
InputStream is=socket.getInputStream();//獲得字節流
BufferedReader br=new BufferedReader(new InputStreamReader(is));//字節流轉化爲字符流並添加緩衝
String info=null;
while((info=br.readLine())!=null){
System.out.println("我是服務端,客戶端說:"+info);
}
socket.shutdownInput();//必須要及時關閉,因爲readline這個方法是以\r\n作爲界定符的,由於發送消息的那一端用的是PrintWriter的write()方法,這個方法並沒加上\r\n,所以會一直等待
//回覆客戶端
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.write("歡迎您!");
pw.flush();
pw.close();
os.close();
br.close();
is.close();//關閉返回的 InputStream 將關閉關聯套接字。
socket.close();
serversocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//再啓動客戶端,需要給定訪問的ip地址和端口號,然後寫入信息,並接受服務端信息(這部分與上面正好顛倒),最後關閉資源。import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
//基於tcp協議的socket通信,客戶端
public class client {
public static void main(String[] args) {
try {
Socket socket=new Socket("127.0.0.1",8888);//創建客戶端socket,因爲是本地,ip地址就是127.0.0.1
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.write("用戶名:admin;密碼:123");
pw.flush();
socket.shutdownOutput();//必須加上這句話,表示輸出流的結束,注意此時不能關閉os,因爲關閉os會關閉綁定的socket
//在客戶端獲取迴應信息
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=null;
while((info=br.readLine())!=null){
System.out.println("我是客戶端,服務端說:"+info);
}
br.close();
is.close();
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}