Socket通信

举报
chnliyc 发表于 2019/01/29 16:37:53 2019/01/29
【摘要】 Socket通信一.使用TCP协议通信1. 客户端// 1.创建一个Socket对象,并指定服务端的IP及端口号 Socket socket = new Socket("...", );// 2.创建一个InputStream对象,读取要发送的文件InputStream inputStream = new FileInputStream("e://a.txt"); // 3.获取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());

   

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。