java网络编程

来源:互联网 发布:跟阿铭学linux 编辑:程序博客网 时间:2024/05/21 05:21

在现有的网络中,网络通讯的方式主要有两种:
1、 TCP(传输控制协议)方式
2、 UDP(用户数据报协议)方式
而java在对于这两种网络编程中提供了封装类:
TCP:ServerSocket和Socket
UDP:DatagramSocket和DatagramPacket
TCP和UDP的区别:
这里写图片描述
TCP:
这里写图片描述
在等待连接的时候是阻塞的,等带客服端连接上之后,才向下面执行,一般都是多线程执行的,在服务器连接多过的时候,处理的速度就会非常慢,建议设置线程的优先级!
UDP:
//服务器端
1.创建DatagramSocket,指定端口号
2.创建DatagramPacket
3.接收客服端发送的数据信息
4.读取数据
//客户端
1.定义发送的信息
2.创建DatagramPacket 包含要发送的数据
3.创建DatagramSocket
4.发送数据包

UDPClient:        //创建DatagramSocket         DatagramSocket datagramSocket=new DatagramSocket();        //定义发送的信息        InetAddress address=InetAddress.getByName("a");        int port=8888;        byte[] data="你好客服端".getBytes();        //创建DatagramPacket 包含要发送的数据        DatagramPacket datagramPacket=new DatagramPacket(data,data.length,address,port);        //发送数据包        datagramSocket.send(datagramPacket);UDPServer:        //创建DatagramSocket,指定端口号        DatagramSocket socket=new DatagramSocket(8888);//指定端口号        byte[] data=new byte[1024];        //创建DatagramPacket         DatagramPacket datagramPacket=new DatagramPacket(data,data.length);        //接收数据        socket.receive(datagramPacket);//会一直阻塞,知道接收到数据报        System.out.println(new String(data,0,datagramPacket.getLength()));TCPServcer:    ServerSocket serverSocket=new ServerSocket(8888);        System.out.println("服务器已经启动");        while(true){            Socket scoket= serverSocket.accept();               new ServerThread(scoket).start();        }ServerThread:    private Socket socket;    public ServerThread(Socket socket){        this.socket=socket;    }    @Override    public void run() {        try {            InputStream inputStream=socket.getInputStream();            InputStreamReader inputStreamReader=new InputStreamReader(inputStream);            BufferedReader bufferedReader=new BufferedReader(inputStreamReader);            String str=null;            while((str=bufferedReader.readLine())!=null){                System.out.println("客服端说:"+str);            }        } catch (IOException e) {            e.printStackTrace();        }    }TCPClient:    Socket socket=new Socket("a",8888);        PrintWriter printWriter=new PrintWriter(socket.getOutputStream());        printWriter.write("服务器你好!+1");        printWriter.flush();        printWriter.close();        socket.close();

个人建议,个人理解

0 0