Java网络编程Socket(JAVA网络编程是什么)

  本篇文章为你整理了Java网络编程Socket(JAVA网络编程是什么)的详细内容,包含有JAVA网络编程面试题 JAVA网络编程是什么 java socket编程 java socket nio Java网络编程Socket,希望能帮助你了解 Java网络编程Socket。

  笔记 韩顺平Java自学笔记 网络多线程_关注永雏塔菲喵的博客-CSDN博客

  网课 【韩顺平讲Java】Java网络多线程专题 - TCP UDP Socket编程 多线程 并发处理 文件传输 新闻推送 Java_哔哩哔哩_bilibili

  通信项目上传到github:cxy-sky/JavaSocket: Java 网络多线程专题,包括 TCP UDP Socket编程 多线程 并发处理 文件传输 新闻推送 (github.com)
 

  2022年9月7日完结

  InetAddress

  

package com.jiao;

 

  import java.net.InetAddress;

  import java.net.UnknownHostException;

  public class Main {

   public static void main(String[] args) throws UnknownHostException {

  // 获得本机的InetAddress对象

   InetAddress localHost = InetAddress.getLocalHost();

   System.out.println(localHost);

  // 根据指定的主机名获得InetAddress对象

   InetAddress byName = InetAddress.getByName("sky");

   System.out.println(byName);

  // 根据域名返回对应的ip

   InetAddress byName1 = InetAddress.getByName("www.baidu.com");

   System.out.println(byName1);

  // 通过getHostAddress对象使他获得对应的地址ipv4地址

   String hostAddress = byName1.getHostAddress();

   System.out.println(hostAddress);

  // 获取对应的域名

   String hostName = byName1.getHostName();

   System.out.println(hostName);

  

 

  Socket

  简介

  理解

  TCP网络通信

  简介

  案例1 字节流

  服务端

  

package com.jiao.socket.tcp01;

 

  import java.io.IOException;

  import java.io.InputStream;

  import java.net.InetAddress;

  import java.net.ServerSocket;

  import java.net.Socket;

   * auth:@highSky

   * create:2022/8/31

   * email:zgt9321@qq.com

  public class Server {

   public static void main(String[] args) throws IOException {

  // 要求电脑上没有其他程序在监听9999接口

   ServerSocket serverSocket = new ServerSocket(9999);

   System.out.println("服务器在9999端口进行监听");

   //程序阻塞,不再向下执行 如果有客户端socket链接,返回一个socket链接,开始向下执行

   Socket socket = serverSocket.accept();

   System.out.println("客户端 socket = "+socket.getClass());

  // 客户端没有发送消息的话,会堵塞在这里

   InputStream inputStream = socket.getInputStream();

   byte[] msg = new byte[1024];

   int len = 0;

   while ((len = inputStream.read(msg)) != -1) {

   System.out.println("收到消息: " + socket.getLocalAddress().getHostName() + " " + new String(msg, 0, len));

   inputStream.close();

   socket.close();

   serverSocket.close();

   System.out.println("服务关闭");

  

 

  客户端

  

package com.jiao.socket.tcp01;

 

  import java.io.IOException;

  import java.io.OutputStream;

  import java.net.InetAddress;

  import java.net.Socket;

  import java.net.UnknownHostException;

   * auth:@highSky

   * create:2022/8/31

   * email:zgt9321@qq.com

  public class Client {

   public static void main(String[] args) throws IOException {

   Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 9999);

   System.out.println("正在发送消息");

   OutputStream outputStream = socket.getOutputStream();

   outputStream.write("hello jiaojiao".getBytes());

   //发送完成结束标记

   socket.shutdownOutput();

   System.out.println("消息发送完成");

   outputStream.close();

   socket.close();

  

 

  案例2 互发消息

  server

  

package com.jiao.socket.tcp02;

 

  import java.io.IOException;

  import java.io.InputStream;

  import java.io.OutputStream;

  import java.net.InetAddress;

  import java.net.ServerSocket;

  import java.net.Socket;

   * auth:@highSky

   * create:2022/8/31

   * email:zgt9321@qq.com

  public class Server {

   public static void main(String[] args) throws IOException {

   ServerSocket serverSocket = new ServerSocket(9999);

   System.out.println("server" + InetAddress.getLocalHost().getHostAddress() + "正在监听");

   Socket socket = serverSocket.accept();

   InputStream inputStream = socket.getInputStream();

   byte[] msg = new byte[1024];

   int len = 0;

   while ((len = inputStream.read(msg)) != -1) {

   System.out.println("收到消息: " + socket.getLocalAddress().getHostName() + " " + new String(msg, 0, len));

   //给client发送消息

   OutputStream outputStream = socket.getOutputStream();

   outputStream.write("hello tiantian".getBytes());

   //发送完成结束标记

   socket.shutdownOutput();

   outputStream.close();

   inputStream.close();

   socket.close();

   serverSocket.close();

   System.out.println("服务关闭");

  

 

  client

  

package com.jiao.socket.tcp02;

 

  import java.io.IOException;

  import java.io.InputStream;

  import java.io.OutputStream;

  import java.net.InetAddress;

  import java.net.Socket;

   * auth:@highSky

   * create:2022/8/31

   * email:zgt9321@qq.com

  public class Client {

   public static void main(String[] args) throws IOException {

  // Socket socket = new Socket("106.14.219.106", 9999);

   Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 9999);

   System.out.println("正在发送消息");

   OutputStream outputStream = socket.getOutputStream();

   outputStream.write("hello jiaojiao".getBytes());

   //发送完成结束标记

   socket.shutdownOutput();

   System.out.println("消息发送完成");

   //接收服务端发来的消息

   InputStream inputStream = socket.getInputStream();

   byte[] msg = new byte[1024];

   int len = 0;

   while ((len = inputStream.read(msg)) != -1) {

   System.out.println(new String(msg, 0, len));

   inputStream.close();

   outputStream.close();

   socket.close();

  

 

  案例3 字节流

  使用writer时,写入数据后,要调用flush刷新

  

//input字节流转换为reader字符流

 

  InputStream inputStream = socket.getInputStream();

  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

  

 

  

//output字节流转换为writer字符流

 

  OutputStream outputStream = socket.getOutputStream();

  BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));

  

 

  

package com.jiao.socket.tcp03;

 

  import java.io.*;

  import java.net.InetAddress;

  import java.net.ServerSocket;

  import java.net.Socket;

   * auth:@highSky

   * create:2022/8/31

   * email:zgt9321@qq.com

  public class Server {

   public static void main(String[] args) throws IOException {

   ServerSocket serverSocket = new ServerSocket(9999);

   System.out.println("server" + InetAddress.getLocalHost().getHostAddress() + "正在监听");

   Socket socket = serverSocket.accept();

   InputStream inputStream = socket.getInputStream();

   BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

   String msg = bufferedReader.readLine();

   System.out.println("server 收到消息: " + socket.getLocalAddress().getHostName() + " " + msg);

   OutputStream outputStream = socket.getOutputStream();

   BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));

   bufferedWriter.write("hello tiantian");

   bufferedWriter.newLine();

   bufferedWriter.flush();

   bufferedWriter.close();

   bufferedReader.close();

   socket.close();

   serverSocket.close();

   System.out.println("服务关闭");

  

 

  客户端

  

package com.jiao.socket.tcp03;

 

  import java.io.*;

  import java.net.InetAddress;

  import java.net.Socket;

   * auth:@highSky

   * create:2022/8/31

   * email:zgt9321@qq.com

  public class Client {

   public static void main(String[] args) throws IOException {

  // Socket socket = new Socket("106.14.219.106", 9999);

   Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 9999);

   System.out.println("正在发送消息");

   OutputStream outputStream = socket.getOutputStream();

   BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));

   bufferedWriter.write("hello jiaojiao");

   bufferedWriter.newLine();

   bufferedWriter.flush();

   System.out.println("消息发送完成");

   //接收服务端发来的消息

   InputStream inputStream = socket.getInputStream();

   BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

   String msg = bufferedReader.readLine();

   System.out.println("client 收到消息: " + socket.getLocalAddress().getHostName() + " " + msg);

   bufferedReader.close();

   bufferedWriter.close();

   socket.close();

  

 

  工具类

  

package com.jiao.upload;

 

  import java.io.BufferedReader;

  import java.io.ByteArrayOutputStream;

  import java.io.InputStream;

  import java.io.InputStreamReader;

   * auth:@highSky

   * create:2022/9/1

   * email:zgt9321@qq.com

  public class StreamUtils {

   public static byte[] streamToByteArray(InputStream is) throws Exception {

   // 创建输出流对象

   ByteArrayOutputStream bos = new ByteArrayOutputStream();

   // 字节数组

   byte[] b = new byte[1024];

   int len;

   while ((len = is.read(b)) != -1) {

   // 循环读取

   // 把读取到的数据,写入 bos

   bos.write(b, 0, len);

   byte[] array = bos.toByteArray();

   bos.close();

   return array;

   public static String streamToString(InputStream is) throws Exception {

   BufferedReader reader = new BufferedReader(new InputStreamReader(is));

   StringBuilder builder = new StringBuilder();

   String line;

   while ((line = reader.readLine()) != null) {

   builder.append(line + "\r\n");

   return builder.toString();

  

 

  server

  

package com.jiao.upload;

 

  import java.io.*;

  import java.net.ServerSocket;

  import java.net.Socket;

   * auth:@highSky

   * create:2022/9/1

   * email:zgt9321@qq.com

  public class Server {

   public static void main(String[] args) throws Exception {

   ServerSocket serverSocket = new ServerSocket(9999);

   System.out.println("》》服务开启,等待连接,发送图片");

   //得到连接

   Socket socket = serverSocket.accept();

   //准备图片

   String imgName = "src/com/jiao/upload/jiaojiao.png";

   BufferedInputStream bis = new BufferedInputStream(new FileInputStream(imgName));

   //将图片保存为byte数组中

   byte[] img = StreamUtils.streamToByteArray(bis);

   //获取socket的输出流

   OutputStream outputStream = socket.getOutputStream();

   //转换为缓存输出流

   BufferedOutputStream bos = new BufferedOutputStream(outputStream);

   bos.write(img);

   System.out.println("》》图片发送完成");

   socket.shutdownOutput();

   //客户端收到图片后的反馈信息

   InputStream inputStream = socket.getInputStream();

   BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

   System.out.println(reader.readLine());

   bos.close();

   bis.close();

   reader.close();

   socket.close();

  

 

  client

  

package com.jiao.upload;

 

  import java.io.*;

  import java.net.InetAddress;

  import java.net.Socket;

  import java.net.UnknownHostException;

   * auth:@highSky

   * create:2022/9/1

   * email:zgt9321@qq.com

  public class Client {

   public static void main(String[] args) throws Exception {

   Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 9999);

   System.out.println("》》等待图片");

   //获取socket接收到的二进制图片数据

   InputStream inputStream = socket.getInputStream();

   BufferedInputStream bis = new BufferedInputStream(inputStream);

   byte[] img = StreamUtils.streamToByteArray(bis);

   //保存到本地

   String imgName = "src/com/jiao/upload/tiantian.png";

   BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(imgName));

   bos.write(img);

   System.out.println("》》保存完成");

  
//给服务端发送接受完成信息

   BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

   writer.write(InetAddress.getLocalHost().getHostName() + "已收到图片");

   writer.newLine();

   writer.flush();

   writer.close();

   bos.close();

   bis.close();

   socket.close();

  

 

  原理

  user1

  

package com.jiao.udp;

 

  import java.io.IOException;

  import java.net.*;

   * auth:@highSky

   * create:2022/9/2

   * email:zgt9321@qq.com

  public class User1 {

   public static void main(String[] args) throws IOException {

   DatagramSocket socket = new DatagramSocket(9999);

   //向user2发送消息

   byte[] bag = new byte[1024];

   DatagramPacket packet = new DatagramPacket(bag, bag.length, InetAddress.getByName("192.168.1.3"), 9998);

   byte[] msg = "Hello jiaojiao".getBytes();

   packet.setData(msg, 0, msg.length);

   socket.send(packet);

   System.out.println("发送完成");

   System.out.println("等待user2回复");

   packet = new DatagramPacket(bag, bag.length);

   socket.receive(packet);

   msg = packet.getData();

   System.out.println(new String(msg, 0, msg.length));

   System.out.println("通信完成");

   socket.close();

  

 

  user2

  

package com.jiao.udp;

 

  import java.io.IOException;

  import java.net.DatagramPacket;

  import java.net.DatagramSocket;

  import java.net.InetAddress;

  import java.net.SocketException;

   * auth:@highSky

   * create:2022/9/2

   * email:zgt9321@qq.com

  public class User2 {

   public static void main(String[] args) throws IOException {

   DatagramSocket socket = new DatagramSocket(9998);

   //接受user1的消息

   byte[] bag = new byte[1024];

   DatagramPacket packet = new DatagramPacket(bag, bag.length);

   System.out.println("等待user1的消息");

   socket.receive(packet);

   byte[] msg = packet.getData();

   System.out.println(new String(msg, 0, msg.length));

   //回复user1

   packet = new DatagramPacket(bag, bag.length, InetAddress.getByName("192.168.1.3"), 9999);

   msg = "hello tiantian".getBytes();

   packet.setData(msg, 0, msg.length);

   socket.send(packet);

   System.out.println("通信结束");

   socket.close();

  

 

  server

  

package com.jiao.homework.test1;

 

  import java.io.*;

  import java.net.ServerSocket;

  import java.net.Socket;

   * auth:@highSky

   * create:2022/9/2

   * email:zgt9321@qq.com

  public class Server {

   public static void main(String[] args) throws IOException {

   ServerSocket serverSocket = new ServerSocket(9999);

   System.out.println(" 服务已开启,等待连接");

   Socket socket = serverSocket.accept();

   BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

  // System.out.println("client: " + reader.readLine());

   BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

   if ("name".equals(reader.readLine()))

   writer.write("nova");

   else

   writer.write("你说啥呢");

   writer.newLine();

   writer.flush();

   System.out.println("client: " + reader.readLine());

   writer.write("编写java程序");

   writer.newLine();

   writer.flush();

   writer.close();

   reader.close();

   socket.close();

  

 

  client

  

package com.jiao.homework.test1;

 

  import java.io.*;

  import java.net.InetAddress;

  import java.net.Socket;

  import java.net.UnknownHostException;

   * auth:@highSky

   * create:2022/9/2

   * email:zgt9321@qq.com

  public class Client {

   public static void main(String[] args) throws IOException {

   Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 9999);

   System.out.println(" 给服务器发送消息");

   //给server发送消息

   BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

   writer.write("name");

   writer.newLine();

   writer.flush();

  
//接受回复

   BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

  // System.out.println("server: " + reader.readLine());

   if ("name".equals(reader.readLine()))

   writer.write("hobby");

   else

   writer.write("你说啥呢");

   writer.newLine();

   writer.flush();

   System.out.println("server: " + reader.readLine());

   writer.close();

   reader.close();

   socket.close();

  

 

  userA

  

package com.jiao.homework.udp;

 

  import java.io.IOException;

  import java.net.*;

  import java.util.Scanner;

   * auth:@highSky

   * create:2022/9/2

   * email:zgt9321@qq.com

  public class UserA {

   public static void main(String[] args) throws IOException {

   Scanner in = new Scanner(System.in);

   //发送方

   DatagramSocket socket = new DatagramSocket(9999);

   byte[] bag = new byte[1024];

   DatagramPacket packet = new DatagramPacket(bag, bag.length, InetAddress.getByName("192.168.1.3"), 9998);

   System.out.println("请输入问题:");

   String msgS = in.nextLine();

   byte[] msgB = msgS.getBytes();

   packet.setData(msgB);

   socket.send(packet);

   packet = new DatagramPacket(bag, bag.length);

   socket.receive(packet);

   msgB = packet.getData();

   System.out.println(new String(msgB, 0, packet.getLength()));

   socket.close();

  

 

  userB

  

package com.jiao.homework.udp;

 

  import java.io.IOException;

  import java.net.DatagramPacket;

  import java.net.DatagramSocket;

  import java.net.InetAddress;

  import java.net.SocketException;

   * auth:@highSky

   * create:2022/9/2

   * email:zgt9321@qq.com

  public class UserB {

  
byte[] bag = new byte[1024];

   DatagramPacket packet = new DatagramPacket(bag, bag.length);

   socket.receive(packet);

   byte[] msgB = packet.getData();

   System.out.println(new String(msgB, 0, packet.getLength()));

   packet = new DatagramPacket(bag, bag.length, InetAddress.getByName("192.168.1.3"), 9999);

   packet.setData("四大名著为。。。。。。".getBytes());

   socket.send(packet);

   socket.close();

  

 

  server

  

package com.jiao.homework.trans;

 

  import java.io.*;

  import java.net.ServerSocket;

  import java.net.Socket;

   * auth:@highSky

   * create:2022/9/3

   * email:zgt9321@qq.com

  public class Server {

   public static void main(String[] args) throws Exception {

   ServerSocket serverSocket = new ServerSocket(9999);

   //服务端等待客户端下载请求

   System.out.println("等待请求");

   Socket socket = serverSocket.accept();

   //得到socket请求

   InputStream is = socket.getInputStream();

   byte[] data = new byte[1024];

   int len = 0;

   //文件名称,这里是单线程可以用stringBuilder

   StringBuilder fileName = new StringBuilder();

   while ((len = is.read(data, 0, data.length)) != -1) {

   fileName.append(new String(data, 0, len));

   System.out.println(fileName);

   BufferedInputStream bis = null;

   if ("碧蓝之海".equals(fileName.toString())) {

   fileName = new StringBuilder("src/com/jiao/homework/trans/碧蓝之海.mp3");

   } else {

   fileName = new StringBuilder("src/com/jiao/homework/trans/sorry.txt");

   bis = new BufferedInputStream(new FileInputStream(fileName.toString()));

   byte[] file = StreamUtils.streamToByteArray(bis);

   //发送给客户端

   BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());

   bos.write(file);

   bos.flush();

   socket.shutdownOutput();

   bos.close();

   bis.close();

   socket.close();

   serverSocket.close();

  

 

  client

  

package com.jiao.homework.trans;

 

  import java.io.*;

  import java.net.InetAddress;

  import java.net.Socket;

  import java.net.UnknownHostException;

  import java.util.Scanner;

   * auth:@highSky

   * create:2022/9/3

   * email:zgt9321@qq.com

  public class Client {

   public static void main(String[] args) throws Exception {

   Scanner scanner = new Scanner(System.in);

   System.out.println("请输入文件名");

   String filename = scanner.nextLine();

   //给服务端发送下载文件的文件名

   Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 9999);

   OutputStream os = socket.getOutputStream();

   os.write(filename.getBytes());

   os.flush();

   socket.shutdownOutput();

   //获取返回的文件,下载

   //将文件读取到数组中

   BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());

   byte[] file = StreamUtils.streamToByteArray(bis);

   //保存到本地

   if ("碧蓝之海".equals(filename))

   filename = "E:\\" + filename + ".mp3";

   else

   filename = "E:\\" + filename + ".txt";

   BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));

   bos.write(file);

   bos.flush();

   bos.close();

   bis.close();

   os.close();

   socket.close();

  

 

  StreamUtils

  

package com.jiao.homework.trans;

 

  import java.io.BufferedReader;

  import java.io.ByteArrayOutputStream;

  import java.io.InputStream;

  import java.io.InputStreamReader;

   * auth:@highSky

   * create:2022/9/1

   * email:zgt9321@qq.com

  public class StreamUtils {

   public static byte[] streamToByteArray(InputStream is) throws Exception {

   // 创建输出流对象

   ByteArrayOutputStream bos = new ByteArrayOutputStream();

   // 字节数组

   byte[] b = new byte[1024];

   int len;

   while ((len = is.read(b)) != -1) {

   // 循环读取

   // 把读取到的数据,写入 bos

   bos.write(b, 0, len);

   byte[] array = bos.toByteArray();

   bos.close();

   return array;

   public static String streamToString(InputStream is) throws Exception {

   BufferedReader reader = new BufferedReader(new InputStreamReader(is));

   StringBuilder builder = new StringBuilder();

   String line;

   while ((line = reader.readLine()) != null) {

   builder.append(line + "\r\n");

   return builder.toString();

  

 

  项目-多用户通信

  以上就是Java网络编程Socket(JAVA网络编程是什么)的详细内容,想要了解更多 Java网络编程Socket的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: