一、 Socket通訊模型以下: 服務器
應用程序經過套接字能夠進行通訊,可使用udp協議或者使用tcp協議,當客戶端和服務器端的協議時相對應的,客戶端使用tcp,那麼服務器端使用tcp 網絡
二、 UDP協議:把數據打包成數據包,而後直接發送對應的ip地址,速度快,可是不保證成功率,而且數據大小有限 socket
TCP協議:首先鏈接接收方,而後發送數據,保證成功率, 速度慢 tcp
三、 TCP通訊方式以下: spa
而UDP通訊不使用InputStream和OutputStream 線程
四、 UDP通訊實現: server
UDP使用DatagramSocket對象來實現 對象
UDP的客戶端代碼實現以下: 進程
public static void main(String[] args) { ip
try {
//首先建立一個DatagramSocket對象
DatagramSocket socket = new DatagramSocket(4567);
//建立一個InetAddree
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello"; //這是要傳輸的數據
byte data [] = str.getBytes(); //把傳輸內容分解成字節
//建立一個DatagramPacket對象,並指定要講這個數據包發送到網絡當中的哪一個、
地址,以及端口號
DatagramPacket packet = new
DatagramPacket(data,data.length,serverAddress,4567);
//調用socket對象的send方法,發送數據
socket.send(packet);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
UDP的服務端代碼實現以下:
//建立一個DatagramSocket對象,並指定監聽的端口號
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
//建立一個空的DatagramPacket對象
DatagramPacket packet =
new DatagramPacket(data,data.length);
//使用receive方法接收客戶端所發送的數據,
//若是客戶端沒有發送數據,該進程就停滯在這裏
socket.receive(packet);
String result = new
String(packet.getData(),packet.getOffset(),
packet.getLength());
System.out.println("result--->" + result);
五、 TCP通訊的實現:
TCP使用Socket對象
TCP協議客戶端實現:
//建立一個Socket對象,指定服務器端的IP地址和端口號
Socket socket = new Socket("192.168.1.104",4567);
//使用InputStream讀取硬盤上的文件
InputStream inputStream = new
FileInputStream("f://file/words.txt");
//從Socket當中獲得OutputStream
OutputStream outputStream = socket.getOutputStream();
byte buffer [] = new byte[4*1024];
int temp = 0 ;
//將InputStream當中的數據取出,並寫入到OutputStream當中
while((temp = inputStream.read(buffer)) != -1){
outputStream.write(buffer, 0, temp);
}
outputStream.flush();
}
TCP協議服務器端現實:
//聲明一個ServerSocket對象
ServerSocket serverSocket = null;
try {
//建立一個ServerSocket對象,並讓這個Socket在4567端口監聽
serverSocket = new ServerSocket(4567);
//調用ServerSocket的accept()方法,接受客戶端所發送的請求,
//若是客戶端沒有發送數據,那麼該線程就停滯不繼續
Socket socket = serverSocket.accept();
//從Socket當中獲得InputStream對象
InputStream inputStream = socket.getInputStream();
byte buffer [] = new byte[1024*4];
int temp = 0;
//從InputStream當中讀取客戶端所發送的數據
while((temp = inputStream.read(buffer)) != -1){
System.out.println(new String(buffer,0,temp));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
serverSocket.close();
}