*Socket套接字用于描述计算机ip地址和端口
* 通信链的句柄,用户各种计算机和虚拟机之间的
* 通信,所有应用程序几乎都用socket
我们先看Tcp通信范例:
服务端:
package review.socketTcpOrUdp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTcp {
publicstatic void main(String[] args) {
try {
ServerSocketserverSocket = new ServerSocket(9527);
Socketsocket =serverSocket.accept();
InputStreamReader inputStreamReader = newInputStreamReader(socket.getInputStream());
BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
//将数据写入socket通道并推出去
PrintWriterprintWriter = new PrintWriter(socket.getOutputStream());
while(true){
StringclientStr = bufferedReader.readLine();
printWriter.println("Server"+clientStr);
printWriter.flush();
if(clientStr.equals("exit")){
break;
}
}
serverSocket.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
客户端:
package review.socketTcpOrUdp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientTcp {
publicstatic void main(String[] args) {
try {
SocketclientSocket = new Socket("127.0.0.1", 9527);
//读取控制台输入的数据
InputStreamReader inputStreamReader = newInputStreamReader(System.in);
BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
//将读出来的程序写入socket通道中
OutputStreamoutputStream = clientSocket.getOutputStream();
PrintWriterprintWriter = new PrintWriter(outputStream);
//读取来自服务端的数据回应
BufferedReader bufferedReaderServer = new BufferedReader(
newInputStreamReader(clientSocket.getInputStream()));
while(true){
StringSystemStr = bufferedReader.readLine();
printWriter.println(SystemStr);
printWriter.flush();
//打印服务器端回应
StringServerStr =bufferedReaderServer.readLine();
System.out.println(ServerStr);
if(SystemStr.equals("exit")){
break;
}
}
clientSocket.close();
} catch(Exception e) {
}
}
}
再看udp:
服务端:
package review.socketTcpOrUdp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ServerUdp {
publicstatic void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket(9578);
while (true){
DatagramPacket recieveDatagramPacket = new DatagramPacket(newbyte[1024], 1024);
datagramSocket.receive(recieveDatagramPacket);
StringclientUdpStr = new String(recieveDatagramPacket.getData());
System.out.println(clientUdpStr);
//发出数据包
DatagramPacket sendDatagramPacket = new DatagramPacket("yes I canrecive".getBytes(),
"yes I canrecive".getBytes().length,recieveDatagramPacket.getAddress(),
recieveDatagramPacket.getPort());
datagramSocket.send(sendDatagramPacket);
if(clientUdpStr.trim().equals("exit")) {
break;
}
//datagramSocket.close();
}
datagramSocket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
客户端:
package review.socketTcpOrUdp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class ClientUdp {
publicstatic void main(String[] args) {
try{
DatagramSocket datagramSocket = new DatagramSocket();
while (true){
//DatagramSocket datagramSocket =new DatagramSocket();
InputStreamReader inputStreamReader = newInputStreamReader(System.in);
BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
StringclientStr = bufferedReader.readLine();
DatagramPacket sendDatagramPacket = newDatagramPacket(clientStr.getBytes(),clientStr.getBytes().length,
InetAddress.getLocalHost(), 9578);
datagramSocket.send(sendDatagramPacket);
DatagramPacket recieveDatagramPacket =new DatagramPacket(newbyte[1024], 1024);
datagramSocket.receive(recieveDatagramPacket);
StringServerDatagramPacket = newString(recieveDatagramPacket.getData());
System.out.println(ServerDatagramPacket);
if(clientStr.equals("exit")){
break;
}
}
datagramSocket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
对比Tcp和Udp我们知道:
1:Tcp事先建立连接,按序到达,相对安全可靠(114查询台)
2:Udp不建立连接,不安序,但效率高,没有主次之分(QQ聊天)
另外bufferedReader.readLine();方法控制台输入的字符完整内容是"zifu/n/t"所以服务段读取内容时要把字符.trim方法消除首尾空格,这样用equal方法就能比较了
我们先看Tcp通信范例:
服务端:
package review.socketTcpOrUdp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTcp {
try {
ServerSocketserverSocket = new ServerSocket(9527);
Socketsocket =serverSocket.accept();
InputStreamReader inputStreamReader = newInputStreamReader(socket.getInputStream());
BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
//将数据写入socket通道并推出去
PrintWriterprintWriter = new PrintWriter(socket.getOutputStream());
while(true){
StringclientStr = bufferedReader.readLine();
printWriter.println("Server"+clientStr);
printWriter.flush();
if(clientStr.equals("exit")){
break;
}
}
serverSocket.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
客户端:
package review.socketTcpOrUdp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientTcp {
publicstatic void main(String[] args) {
try {
SocketclientSocket = new Socket("127.0.0.1", 9527);
//读取控制台输入的数据
InputStreamReader inputStreamReader = newInputStreamReader(System.in);
BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
//将读出来的程序写入socket通道中
OutputStreamoutputStream = clientSocket.getOutputStream();
PrintWriterprintWriter = new PrintWriter(outputStream);
//读取来自服务端的数据回应
BufferedReader bufferedReaderServer = new BufferedReader(
newInputStreamReader(clientSocket.getInputStream()));
while(true){
StringSystemStr = bufferedReader.readLine();
printWriter.println(SystemStr);
printWriter.flush();
//打印服务器端回应
StringServerStr =bufferedReaderServer.readLine();
System.out.println(ServerStr);
if(SystemStr.equals("exit")){
break;
}
}
clientSocket.close();
} catch(Exception e) {
}
}
}
再看udp:
服务端:
package review.socketTcpOrUdp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ServerUdp {
publicstatic void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket(9578);
while (true){
DatagramPacket recieveDatagramPacket = new DatagramPacket(newbyte[1024], 1024);
datagramSocket.receive(recieveDatagramPacket);
StringclientUdpStr = new String(recieveDatagramPacket.getData());
System.out.println(clientUdpStr);
//发出数据包
DatagramPacket sendDatagramPacket = new DatagramPacket("yes I canrecive".getBytes(),
"yes I canrecive".getBytes().length,recieveDatagramPacket.getAddress(),
recieveDatagramPacket.getPort());
datagramSocket.send(sendDatagramPacket);
if(clientUdpStr.trim().equals("exit")) {
break;
}
//datagramSocket.close();
}
datagramSocket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
客户端:
package review.socketTcpOrUdp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class ClientUdp {
publicstatic void main(String[] args) {
try{
DatagramSocket datagramSocket = new DatagramSocket();
while (true){
//DatagramSocket datagramSocket =new DatagramSocket();
InputStreamReader inputStreamReader = newInputStreamReader(System.in);
BufferedReader bufferedReader = newBufferedReader(inputStreamReader);
StringclientStr = bufferedReader.readLine();
DatagramPacket sendDatagramPacket = newDatagramPacket(clientStr.getBytes(),clientStr.getBytes().length,
InetAddress.getLocalHost(), 9578);
datagramSocket.send(sendDatagramPacket);
DatagramPacket recieveDatagramPacket =new DatagramPacket(newbyte[1024], 1024);
datagramSocket.receive(recieveDatagramPacket);
StringServerDatagramPacket = newString(recieveDatagramPacket.getData());
System.out.println(ServerDatagramPacket);
if(clientStr.equals("exit")){
break;
}
}
datagramSocket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
对比Tcp和Udp我们知道:
1:Tcp事先建立连接,按序到达,相对安全可靠(114查询台)
2:Udp不建立连接,不安序,但效率高,没有主次之分(QQ聊天)
另外bufferedReader.readLine();方法控制台输入的字符完整内容是"zifu/n/t"所以服务段读取内容时要把字符.trim方法消除首尾空格,这样用equal方法就能比较了