网络编程

网络编程

1.1 TCP

文件上传

  1. TCP客户端
package com.tcpudp;


import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class TcpClient {
    public static void main(String[] args) throws Exception {
        //创建socket连接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
        //创建一个输出流
        OutputStream outputStream = socket.getOutputStream();
        //读取文件
        FileInputStream fileInputStream = new FileInputStream(new File("C:\\Users\\ks\\Pictures\\1.jpg"));
        //写文件
        byte[] bytes = new byte[1024];
        int len;
        while ((len=fileInputStream.read(bytes))!=-1){
            outputStream.write(bytes,0,len);
        }
        fileInputStream.close();
        outputStream.close();
        socket.close();
    }
}

  1. TCP服务端
package com.tcpudp;


import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
    public static void main(String[] args) throws Exception {
        //创建服务
        ServerSocket serverSocket = new ServerSocket(9000);
        //监听客户端的连接
        Socket accept = serverSocket.accept();  //阻塞式监听,会一直等待客户端连接
        //获取输入流
        InputStream is = accept.getInputStream();
        FileOutputStream fs = new FileOutputStream(new File("recive.jpg"));
        byte[] bs = new byte[1024];
        int len;
        while ((len=is.read(bs))!=-1){
            fs.write(bs,0,len);
        }
        fs.close();
        is.close();
        accept.close();
        serverSocket.close();

    }
}

1.2 UDP

发短信:不用连接,需要知道对方地址!

发送消息

发送端

package com.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UdpClient {
    public static void main(String[] args) throws Exception {
        //新建一个socket连接
        DatagramSocket socket = new DatagramSocket();
        //新建一个包
        String msg = "你好啊!哈哈哈";
        InetAddress localhost = InetAddress.getByName("localhost");
        int port =9090;

        //数据,数据的长度起始,要发送给谁
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);

        socket.send(packet);
        socket.close();
}
}

接收消息

package com.udp;


import java.net.DatagramPacket;
import java.net.DatagramSocket;


public class UdpServer {
    public static void main(String[] args) throws Exception {
        //开放端口
        DatagramSocket socket = new DatagramSocket(9090);
        //接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
        socket.receive(packet);//阻塞接收
        System.out.println(packet.getAddress().getHostAddress());
        System.out.println(new String(packet.getData(), 0, packet.getLength()));
        socket.close();

    }
}

循环发送消息

package com.udp.chat;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;

public class UdpSender {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(8888);


            //准备数据:控制台读取 System.in
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            String data = reader.readLine();
            byte[] bytes = data.getBytes();
            DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress("localhost", 6666));
            socket.send(packet);
            if(data.equals("bye")){
                break;
            }
       }
        socket.close();

    }
}

package com.udp.chat;




import java.net.DatagramPacket;
import java.net.DatagramSocket;


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

        DatagramSocket socket = new DatagramSocket(6666);
        while (true) {
            byte[] bytes = new byte[1024];
            String s = new String(bytes, 0, bytes.length);
            DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
            socket.receive(packet);

            byte[] packetData = packet.getData();
            String string = new String(packetData, 0, packetData.length);
            System.out.println(string);
            if (s.equals("bye")) {
                break;
            }
        }
        socket.close();
    }
}

咨询

posted @ 2021-01-22 10:54  jinWuBlog  阅读(39)  评论(0)    收藏  举报