Socket通信

Socket通信

一.使用TCP协议通信

1. 客户端

// 1.创建一个Socket对象,并指定服务端的IP及端口号 
Socket socket = new Socket("...", );
// 2.创建一个InputStream对象,读取要发送的文件
InputStream inputStream = new FileInputStream("e://a.txt"); 
// 3.获取Socket的OutputStream对象,用于发送数据 
OutputStream outputStream = socket.getOutputStream(); 
// 4.存放读取的本地文件 
byte buffer[] = new byte[1024];
int temp = 10; 
while ((temp = inputStream.read(buffer)) != -1) { 
    outputStream.write(buffer, , temp); 
} 
// 5.发送读取的数据到服务端 
outputStream.flush();
// 6.关闭socket通信,关流  
inputStream.close();  
outputStream.close();  
socket.close(); 

2. 服务端

// 1.声明一个ServerSocket对象,并让这个Socket在端口监听
ServerSocket serverSocket = new ServerSocket();
// 2.接受客户端所发送的请求;如果客户端没有发送数据,那么该线程就停滞不继续
Socket socket = serverSocket.accept();
// 3.从Socket当中得到InputStream对象
InputStream inputStream = socket.getInputStream();
// 4.从InputStream当中读取客户端所发送的数据
byte buffer[] = new byte[1024];
int temp = 10;
while ((temp = inputStream.read(buffer)) != -) {
    System.out.println(new String(buffer, , temp)); 
}
// 5.从Socket当中得到OutputStream对象 
OutputStream output = socket.getOutputStream();
// 6.向客户端发送信息
output.write(str.getBytes("gbk"));
output.flush();
// 7.关闭socket通信,关流
serverSocket.close();
inputStream.close();
output.close();

二.使用UDP协议通信

1.客户端发送数据

// 1.创建DatagramSocket对象并指定一个端口号;如果客户端需要接收服务器的返回数据, 还需使用这个端口号来receive
DatagramSocket socket = new DatagramSocket(...);
// 2.把IP地址转换为网络地址
InetAddress serverAddress = InetAddress.getByName("...");
// 3.设置要发送的报文
String str = "[;fjks;]";
// 4.把字符串转换为字节数组
byte data[] = str.getBytes();  
// 5.创建一个DatagramPacket对象,用于发送数据
//参数一:要发送的数据 参数二:数据的长度 参数三:服务端的网络地址 参数四:服务器端端口号
DatagramPacket packet = new DatagramPacket(data,data.length ,serverAddress , ...);  
// 6.把数据发送到服务端
socket.send(packet);

2.客户端接收服务器返回的数据

// 1.实例化的端口号要和发送时的socket一致,否则收不到data 
DatagramSocket socket = new DatagramSocket(...); 
byte data[] = new byte[ * ]; 
// 2.创建一个DatagramPacket对象,用于接收数据
//参数一:要接受的data 参数二:data的长度 
DatagramPacket packet = new DatagramPacket(data, data.length); 
// 3.接收数据
socket.receive(packet);
// 4.把接收到的data转换为String字符串 
String result = new String(packet.getData(), packet.getOffset(),packet.getLength()); 
// 5.关闭socket通信
socket.close();

3.服务器接收客户端

// 1.创建一个DatagramSocket对象,并指定监听端口
DatagramSocket socket = new DatagramSocket(); 
// 2.创建一个byte类型的数组,用于存放接收到的数据  
byte data[] = new byte[*];  
// 3.创建一个DatagramPacket对象,并指定DatagramPacket对象的大小  
DatagramPacket packet = new DatagramPacket(data,data.length);  
// 4.读取接收到的数据  
socket.receive(packet);  
// 5.把客户端发送的数据转换为字符串
//使用三个参数的String方法。参数一:数据包 参数二:起始位置 参数三:数据包长  
String result = new String(packet.getData(),packet.getOffset() ,packet.getLength());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值