注意;端口号要大于1024的小于等于是系统的端口号
TCP基于链接的协议 安全性高,效率低,
UDP 非链接的协议 安全性低,效率高
image.png
TCP
发送
package com.beicai.tcp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Created by wangye on 2017/5/24.
*/
public class TCPClient {
public static void main(String[] args){
//TCP协议实现的客户端
try {
Socket socket = new Socket("10.114.29.204",3000);
//跟服务器通信 发送消息
OutputStream os = socket.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(os,"UTF-8");
BufferedWriter bw = new BufferedWriter(ow);
bw.write("服务器你好,我是客户端,向你发送消息!");
bw.newLine();
bw.flush();
//接收消息
InputStream is = socket.getInputStream();
InputStreamReader ir = new InputStreamReader(is,"UTF-8");
BufferedReader br = new BufferedReader(ir);
System.out.println("客户端收到的消息:"+br.readLine());
is.close();
ir.close();
br.close();
os.close();
ow.close();
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
接收端
package com.beicai.tcp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Created by wangye on 2017/5/24.
*/
public class TCPServer {
public static void main(String[] args){
//TCP协议的特点
// 1、面向连接的协议(连接时三次握手,取消连接时四次握手)
//2、 安全性高 可以传输大数据 效率低
//TCP协议实现的Socket通信 服务端
//通过ServerSocket 创建服务器 并指定端口号 1024以下是系统保留端口号
try {
ServerSocket server = new ServerSocket(3000);
while(true){
//接收客户端消息
Socket socket = server.accept();
//信息存于Socket对象中
InputStream is = socket.getInputStream();
InputStreamReader ir = new InputStreamReader(is,"UTF-8");
BufferedReader br = new BufferedReader(ir);
System.out.println("服务器收到的消息:"+br.readLine());
//发送消息
OutputStream os = socket.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(os,"UTF-8");
BufferedWriter bw = new BufferedWriter(ow);
bw.write("客户端你好,我是服务器,已收到你的消息!");
bw.newLine();
bw.flush();
is.close();
ir.close();
br.close();
os.close();
ow.close();
bw.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
UDP
发消息
package com.beicai.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* Created by wangye on 2017/5/24.
*/
public class UDPClient {
public static void main(String[] args){
try {
DatagramSocket client = new DatagramSocket();
//发送消息 指定发送地址
InetAddress address = InetAddress.getByName("10.114.29.204");
int port = 9000;
byte[] data = "服务器你好,我是UDP客户端,向你发送消息!".getBytes("UTF-8");
DatagramPacket packet = new DatagramPacket(data,data.length,address,port);
client.send(packet);
//接收消息
byte buffer[] = new byte[1024];
DatagramPacket packet1 = new DatagramPacket(buffer,buffer.length);
//接送客户端发送过来的数据包
client.receive(packet1);
System.out.println("UDP客户端:"+new String(packet1.getData(),0,packet1.getLength(),"UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
接受端
package com.beicai.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
* Created by wangye on 2017/5/24.
*/
public class UDPServer {
public static void main(String[] args){
//UDP协议特点 面向非连接 安全性比较低, 常用于小数据的传送 效率高
//通过UDP协议实现Socket通信 通过数据包发送消息
try {
DatagramSocket server = new DatagramSocket(9000);
while(true){
byte buffer[] = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
//接送客户端发送过来的数据包
server.receive(packet);
System.out.println("UDP服务器:"+new String(packet.getData(),0,packet.getLength(),"UTF-8"));
//发送消息
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte data[] = "UDP客户端你好,我是服务器,已收到你的消息!".getBytes("UTF-8");
DatagramPacket packet1 = new DatagramPacket(data,data.length,address,port);
server.send(packet1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}