java网络编程基础:TCP 博客分类: java基础 java网络编程TCP
程序员文章站
2024-03-24 20:33:28
...
1、TCP特点
Transmission Control Protocol 传输控制协议
面向连接,通过三次握手建立连接,可靠的协议
有明确的客户端和服务器端
一旦连接可以将数据当做一个双向字节流进行交换,开销大
2、相关类
Socket | 客户端Socket服务类 |
ServerSocket | 服务器端Socket服务类 |
3、TCP传输示例代码
// 客户端 public class Client { public static void main(String[] args) throws IOException { // 1:使用Socket对象,创建客户端Socket服务 Socket socket = new Socket("127.0.0.1", 20000); // 2:通过连接建立数据传输通道,通过Socket对象可以获得通道中的输入输出流对象 OutputStream out = socket.getOutputStream(); InputStream in = socket.getInputStream(); // 3:使用输入输出流,读写数据 out.write("Hello World".getBytes()); byte[] b = new byte[1024]; int length = in.read(b); String message = new String(b, 0, length); System.out.println(message); // 4:关闭Socket服务 socket.close(); } } // 服务器端 public class Server { public static void main(String[] args) throws IOException { // 1:通过ServerSocket对象,创建服务器端Socket服务,必须设置端口号 ServerSocket server = new ServerSocket(20000); // 2:获取连接的客户端的Socket对象,accept是阻塞方法 Socket socket = server.accept(); // 3:通过Socket对象获得输入输出流进行读写数据 InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); byte[] b = new byte[1024]; int length = in.read(b); String message = new String(b, 0, length); System.out.println(message); out.write("收到".getBytes()); // 4:关闭客户端、服务器端的服务 socket.close(); server.close(); } }
注意,阻塞式方法需要结束标记,否则容易造成双方同时等待可以通过Socket.shutdownInput(),Socket.shutdownOutput()通知对方.
4、实现文件上传
// 客户端 public class UploadClient { public static void main(String[] args) throws Exception { // 建立Socket服务 Socket socket = new Socket("192.168.1.100", 20000); // 建立文件及流对象 File file = new File("src/com/net/upload/a.jpg"); FileInputStream fis = new FileInputStream(file); OutputStream out = socket.getOutputStream(); // 通过流上传文件 byte[] bur = new byte[1024]; int length = 0; while ((length = fis.read(bur)) != -1) { out.write(bur, 0, length); } fis.close(); // 发送完毕,关闭Socket的输出流 socket.shutdownOutput(); // 接收结束信息 InputStream in = socket.getInputStream(); byte[] message = new byte[1024]; length = in.read(message); System.out.println(new String(message, 0, length)); // 关闭Socket服务 socket.close(); } } // 服务器端 public class UploadServer { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(20000); while (true) { Socket socket = server.accept(); new Thread(new Upload(socket)).start(); } } } // 上传任务类 class Upload implements Runnable { private Socket socket; public Upload(Socket socket) { this.socket = socket; } @Override public void run() { try { String ip = socket.getInetAddress().getHostAddress(); // 建立文件及流对象 InputStream in = socket.getInputStream(); File file = new File("src/com/net/upload/" + ip + "a.jpg"); FileOutputStream fos = new FileOutputStream(file); // 接收文件 byte[] bur = new byte[1024]; int length = 0; while ((length = in.read(bur)) != -1) { fos.write(bur, 0, length); } fos.close(); // 向客户端返回上传完毕消息 OutputStream out = socket.getOutputStream(); out.write("上传完毕".getBytes()); // 关闭Socket服务 socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
推荐阅读
-
java网络编程基础:TCP 博客分类: java基础 java网络编程TCP
-
Java学习笔记_Day023_枚举类型、网络编程、InetAddress、UDP和TCP协议详解
-
TCP控制字段解释 博客分类: TCP/IP网络编程 TCP/IPSocket
-
Java网络编程--利用TCP协议发送接收数据
-
Java网络编程一个基础案例分析,基于TCP协议的客户端上传文件给服务器端(单线程版)
-
JAVA TCP网络编程(客户端和服务器端的代码)
-
JAVA网络编程-TCP客户端与服务器端连接
-
java 利用TCP协议从客户端向服务器端发送文件.(网络编程)
-
JAVA基础 day15 网络编程
-
Java尚硅谷基础笔记-day15 网络编程