Day62.TCP网络编程 -Java常用类、集合、IO#

    科技2022-08-13  96

    TCP网络编程

    例题1

    客户端发送信息给服务端,服务端将数据显示在控制台上

    /* 实现TCP的网络编程 例题1:客户端发送信息给服务端,服务端将数据显示在控制台上 */ public class TCPTest1 { //客户端 @Test public void client() { Socket socket = null; OutputStream os = null; try { //1. 创建Socket对象,指明服务器端的IP和端口号 InetAddress inet1 = InetAddress.getByName("127.0.0.1"); socket = new Socket(inet1,8899); //2. 获取一个输出流,用于输出数据 os = socket.getOutputStream(); //3. 写出数据的操作 os.write("你好,我是客户端".getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { //4. 资源的关闭 if (os != null){ try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } //服务端 @Test public void server() { ServerSocket ss = null; Socket socket = null; InputStream is = null; ByteArrayOutputStream baos = null; try { //1. 创建服务器端的ServerSocket,指明自己的端口号 ss = new ServerSocket(8899); //2. 调用accept()表示接受来自于客服端的socket socket = ss.accept(); //3. 获取一个输入流 is = socket.getInputStream(); //不建议这样写,可能会有乱码 // byte[] buffer = new byte[20]; // int len; // while ((len = is.read(buffer)) != -1){ // String str = new String(buffer,0,len); // System.out.print(str); // } //4. 读取输入流的数据 baos = new ByteArrayOutputStream(); byte[] buffer = new byte[5]; int len; while ((len = is.read(buffer)) != -1){ baos.write(buffer,0,len); } System.out.println(baos.toString()); System.out.println("收到了来自于:"+socket.getInetAddress().getHostAddress()+"的数据"); } catch (IOException e) { e.printStackTrace(); } finally { //5. 资源关闭 if (baos != null){ try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } if (is != null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } if (ss != null){ try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

    例题2

    客户端发送文件给服务端,服务端将文件保存在本地。

    /* 实现TCP的网络编程 例题2: 客户端发送文件给服务端,服务端将文件保存在本地。 */ public class TCPTest2 { //客户端 @Test public void client(){ Socket socket = null; OutputStream os = null; BufferedInputStream bis = null; try { //1. 创建一个Socket对象,指明服务器端的IP和端口号 InetAddress inet1 = InetAddress.getByName("127.0.0.1"); socket = new Socket(inet1,8899); //2. 创建输出流,用于输出数据 os = socket.getOutputStream(); //3. 创建要输入发送的文件 bis = new BufferedInputStream(new FileInputStream("滑稽.jpg")); //4. 发送操作 byte[] buffer = new byte[1024]; int len; while ((len = bis.read(buffer)) != -1){ os.write(buffer,0,len); } } catch (IOException e) { e.printStackTrace(); } finally { //5. 流资源的关闭 if (bis != null){ try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (os != null){ try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } //服务端 @Test public void server(){ ServerSocket ss = null; Socket socket = null; InputStream is = null; BufferedOutputStream bos = null; try { //1. 创建服务器端的ServerSocket,指明自己的端口号 ss = new ServerSocket(8899); //2. 调用accept() 表示接受来自客服端的socket socket = ss.accept(); //3. 获取一个输入流 is = socket.getInputStream(); //4. 创建一个保存本地的输出流 bos = new BufferedOutputStream(new FileOutputStream("滑稽1.jpg")); //5. 保存本地的操作 byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer)) != -1){ bos.write(buffer,0,len); } System.out.println("接收成功"); } catch (IOException e) { e.printStackTrace(); } finally { //6. 资源的关闭 if (bos != null){ try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } if (is != null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } if (ss != null){ try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

    例题3

    /* 实现TCP的网络编程 例题3: 从客户端发送文件给服务端,服务端保存到本地。 并返回"发送成功"客户端。且关闭相应连接 异常采用try-catch-finally接受 */ public class TCPTest3 { //客户端 @Test public void client() throws IOException { //1. Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9909); //2. OutputStream os = socket.getOutputStream(); //3. BufferedInputStream bis = new BufferedInputStream(new FileInputStream("滑稽.jpg")); //4. byte[] buffer = new byte[1024]; int len; while ((len = bis.read(buffer)) != -1){ os.write(buffer,0,len); } //关闭数据的输出 socket.shutdownOutput(); //5. InputStream is = socket.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer1 = new byte[20]; int len1; while ((len1 = is.read(buffer1)) != -1){ baos.write(buffer1,0,len1); } System.out.println(baos.toString()); //6. baos.close(); is.close(); bis.close(); os.close(); socket.close(); } //服务端 @Test public void server() throws IOException { //1. ServerSocket socket = new ServerSocket(9909); //2. Socket accept = socket.accept(); //3. InputStream is = accept.getInputStream(); //4. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("滑稽2.jpg")); //5. byte[] buffer = new byte[1024]; int len; while ((len = is.read(buffer))!= -1){ bos.write(buffer,0,len); } System.out.println("本地接受数据完成"); //6. OutputStream os = accept.getOutputStream(); os.write("文件已接受并保存".getBytes()); //7. os.close(); bos.close(); is.close(); accept.close(); socket.close(); } }
    Processed: 0.012, SQL: 8