首页 / JAVA / JAVA-网络编程-TCP通信
JAVA-网络编程-TCP通信
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA-网络编程-TCP通信,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4627字,纯文字阅读大概需要7分钟。
内容图文
![JAVA-网络编程-TCP通信](/upload/InfoBanner/zyjiaocheng/634/8f6830955d9d4922845020c3b888beaa.jpg)
JAVA-网络编程-TCP通信
TCP Server ServerSoket类
- 此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
- ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接就一直处于等待状态。
构造方法
方法 | 说明 |
---|---|
ServerSocket() |
创建非绑定服务器套接字 |
ServerSocket(int port) |
创建绑定到特定端口的服务器套接字 |
方法
返回值类型 | 方法 | 说明 |
---|---|---|
Socket |
accept() |
侦听并接受到此套接字的连接 |
返回的socket是客户端发来的请求产生的互相连接的对象
TCP Client Socket类
- 此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
构造方法
方法 | 说明 |
---|---|
Socket() |
通过系统默认类型的 SocketImpl 创建未连接套接字 |
Socket(InetAddress address, int port) |
创建一个流套接字并将其连接到指定 IP 地址的指定端口号 |
方法
返回值类型 | 方法 | 说明 |
---|---|---|
OutStream |
getOutputStream() |
返回此套接字的输出流 |
InputStream |
getInputStream() |
返回此套接字的输入流 |
代码
Client发送数据包
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
// socket对象
Socket socket = new Socket("127.0.0.1", 6667);
// 输出流
OutputStream os = socket.getOutputStream();
// 封装数据
os.write("nihao ".getBytes());
// 关闭资源
os.close();
}
}
Server接收数据包
public class Server {
public static void main(String[] args) throws IOException {
// 服务器socket实例
ServerSocket server = new ServerSocket(6667);
Socket socket = server.accept();
// 获取输入流
InputStream is = socket.getInputStream();
// 解包
byte[] bytes = new byte[1024];
int len = is.read(bytes);
String ip = socket.getInetAddress().getHostAddress();
System.out.println("ip:" + ip + ":" + new String(bytes, 0, len));
// 释放资源
is.close();
server.close();
}
}
文件传输:
Client发送文件
public class TCPFileClient {
public static void main(String[] args) throws UnknownHostException, IOException {
// 将本地文件上传至服务器
// 创建客户端对象
Socket socket = new Socket("127.0.0.1", 6669);
// 读取数据
FileInputStream fis = new FileInputStream("D:/io1227/print.txt");
// 目的地
OutputStream os = socket.getOutputStream();
// 创建字节数组缓冲区
byte[] bytes = new byte[1024];
// 发送数据
int len ;
while ((len = fis.read()) != -1) {
os.write(bytes, 0, len);
}
// 给输出流加结束标记
socket.shutdownOutput();
// TODO 接收回复
InputStream is = socket.getInputStream();
// 获取ip地址
String ip = socket.getInetAddress().getHostAddress();
len = is.read(bytes);
System.out.println("ip:" + ip + ",内容为:" + new String(bytes, 0, len));
// 关闭资源
fis.close();
socket.close();
}
}
Server单线程接收数据包
public class TCPFileSever {
public static void main(String[] args) throws IOException {
// 创建服务器实例
ServerSocket sever = new ServerSocket(6669);
// 获取连接实例并获取输出流
Socket socket = sever.accept();
// 数据源
InputStream is = socket.getInputStream();
// 目的地,先判断文件夹是否存在
File file = new File("D:/io1227/upload");
if (!file.exists()) {
file.mkdirs();
}
// 封装文件名
String fileName = "oracle" + System.currentTimeMillis() +
new Random().nextInt(999999) + ".txt";
FileOutputStream fos = new FileOutputStream(file + file.separator + fileName);
// 建立字节缓冲区
byte[] bytes = new byte[1024];
// 接收数据
int len ;
while ((len = is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
// 回复信息
// socket.getOutputStream().write("收到".getBytes());
OutputStream os = socket.getOutputStream();
os.write("收到".getBytes());
// 释放资源
sever.close();
fos.close();
}
}
Sever多线程接收
// Runnable实现类
public class Upload implements Runnable{
private Socket socket ;
public Upload(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
FileOutputStream fos= null;
try {
// 数据源
InputStream is = socket.getInputStream();
// 目的地,先判断文件夹是否存在
File file = new File("D:/io1227/upload");
if (!file.exists()) {
file.mkdirs();
}
// 封装文件名
String fileName = "oracle" + System.currentTimeMillis() +
new Random().nextInt(999999) + ".txt";
fos = new FileOutputStream(file + file.separator + fileName);
// 建立字节缓冲区
byte[] bytes = new byte[1024];
// 接收数据
int len ;
while ((len = is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
// 回复信息
// socket.getOutputStream().write("收到".getBytes());
OutputStream os = socket.getOutputStream();
os.write("收到".getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 释放资源
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
// 主线程
public class Demo01 {
public static void main(String[] args) throws IOException {
// 创建服务器实例
ServerSocket sever = new ServerSocket(6669);
while (true) {
// 获取连接实例并获取输出流
Socket socket = sever.accept();
// 创建线程任务
Upload upload = new Upload(socket);
// 创建线程任务
Thread th = new Thread(upload);
// 开启线程
th.start();
}
}
}
内容总结
以上是互联网集市为您收集整理的JAVA-网络编程-TCP通信全部内容,希望文章能够帮你解决JAVA-网络编程-TCP通信所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。