Java网络编程
网络编程
1、IP
InetAddress inetAddress = InetAddress.getByName("www.baidu.com");
System.out.println(inetAddress);
InetAddress inetAddress1 = InetAddress.getByName("localhost");
System.out.println(inetAddress1);
2、端口
端口表示计算机上一个程序的进程
不同的进程有不同的端口!用来区分软件!
单个协议写端口号不能冲突
端口分类:
公有端口:0-1023
-
HTTP:80
-
HTTPs:443
-
FTP: 21
-
Telent: 23
程序注册端口:1024-49151,分配用户或者程序
-
Tomcat: 8080
-
MySQL: 3306
-
Oracle: 1521
动态、私有:49152-65536
netstat //查看端口
3、通信协议
协议:约定
4、文件上传
TCP客户端
public class TcpClient { public static void main(String[] args) throws Exception{ FileInputStream fis = new FileInputStream("test.jpg"); BufferedInputStream bis = new BufferedInputStream(fis); byte[] buffer = new byte[1024]; int len = 0; InetAddress serVerIP = InetAddress.getByName("127.0.0.1"); int port = 9999; Socket socket = new Socket(serVerIP,port); OutputStream os = socket.getOutputStream(); while((len = bis.read(buffer))!= -1){ os.write(buffer,0,len); } socket.shutdownOutput(); InputStream is = socket.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer2 = new byte[1024]; int len2 = 0; while((len2 = is.read(buffer2))!=-1){ baos.write(buffer2,0,len2); } System.out.println(baos.toString()); baos.close(); is.close(); os.close(); socket.close(); } }
TCP服务端
public class TcpServer { public static void main(String[] args) throws Exception{ ServerSocket serverSocket = new ServerSocket(9999); Socket socket = serverSocket.accept(); InputStream is = socket.getInputStream(); // BufferedReader br = new BufferedReader(new InputStreamReader(is)); // BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); FileOutputStream fos = new FileOutputStream("1.jpg"); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buffer = new byte[1024]; int len = 0; while((len = is.read(buffer))!= -1){ bos.write(buffer,0,len); } OutputStream os = socket.getOutputStream(); os.write("接收完毕,可以断开".getBytes()); bos.close(); fos.close(); is.close(); socket.close(); serverSocket.close(); } }
5、UDP发送消息
public class UdpClient { public static void main(String[] args) throws Exception{ DatagramSocket socket = new DatagramSocket(); String msg = "你好"; InetAddress inetAddress = InetAddress.getByName("localhost"); int port = 9090; DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, inetAddress, port); socket.send(packet); socket.close(); } } public class UdpServer { public static void main(String[] args)throws Exception { DatagramSocket socket = new DatagramSocket(9090); byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length); socket.receive(packet); System.out.println(packet.getAddress().getHostAddress()); System.out.println(new String(packet.getData(),0,packet.getLength())); socket.close(); } }
6、实现既可以发,也可以收
public class TalkSend implements Runnable{ DatagramSocket socket = null; BufferedReader br = null; private int fromPort; private String toIP; private int toPort; public TalkSend(int fromPort, String toIP, int toPort) { this.fromPort = fromPort; this.toIP = toIP; this.toPort = toPort; try { socket = new DatagramSocket(fromPort); br = new BufferedReader(new InputStreamReader(System.in)); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { String msg = br.readLine(); byte[] data = msg.getBytes(); DatagramPacket packet = new DatagramPacket(data, 0, data.length,new InetSocketAddress(this.toIP,this.toPort)); socket.send(packet); if("bye".equals(msg)){ break; } } catch (IOException e) { e.printStackTrace(); } } socket.close(); } } public class TalkReceiver implements Runnable{ DatagramSocket socket = null; private int port; private String msgFrom; public TalkReceiver(int port, String msgFrom) { this.port = port; this.msgFrom = msgFrom; try { socket = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while(true){ try { byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length); socket.receive(packet); //System.out.println(packet.getAddress().getHostAddress()); String receiveData = new String(packet.getData(),0,packet.getLength()); System.out.println(msgFrom + ":"+ receiveData); if("bye".equals(receiveData)){ break; } } catch (IOException e) { e.printStackTrace(); } } socket.close(); } } public class TalkStudent { public static void main(String[] args) { new Thread(new TalkSend(7777,"localhost",9999)).start(); new Thread(new TalkReceiver(8888,"老师")).start(); } } public class TalkTeacher { public static void main(String[] args) { new Thread(new TalkSend(5555,"localhost",8888)).start(); new Thread(new TalkReceiver(9999,"学生")).start(); } }
7、URL
public class URLTest { public static void main(String[] args) throws Exception{ URL url = new URL("https://m10.music.126.net/20200430215646/ce965084eb7259ac7415f084323a86e0/yyaac/515f/5653/540e/f5f2148657a9b5465016cdcf17a407d0.m4a"); HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); InputStream is = urlConnection.getInputStream(); FileOutputStream fos = new FileOutputStream("1.m4a"); byte[] buffer = new byte[1024]; int len = 0; while((len = is.read(buffer))!= -1){ fos.write(buffer,0,len); } fos.close(); is.close(); urlConnection.disconnect(); } }

浙公网安备 33010602011771号