java网络编程

Tcp

实现客户端与服务端交互的步骤:
服务端:
①通过ServerSocket类创建一个对象,参数传入ip地址和端口号;
②循环等待客户端连接,连接成功后返回一个套接字对象;
③服务端套接字socket调用getInputStream() 方法可以获得输入流;
④通过InputStream的read() 方法读取客户端发送的消息;
客户端:
①通过Socket类,将服务器的的ip地址和对应的端口号作为构造参数创建一个套接字对象,即完成连接。
②通过OutputStream流向服务端发送信息。

例子:
服务端:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
    public TcpServer() throws IOException {
        ServerSocket serverSocket=new ServerSocket(9999);
        while (true) {
            Socket socket=serverSocket.accept();
            InputStream inputStream =socket.getInputStream();
            ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
            byte[] buffer=new byte[1024];
            while (inputStream.read(buffer)!=-1){
                byteArrayOutputStream.write(buffer);
            }

            System.out.println(byteArrayOutputStream.toString());
            inputStream.close();
            byteArrayOutputStream.close();
            socket.close();
        }
    }
    public static void main(String args[]) throws IOException {
        TcpServer tcpServer=new TcpServer();
    }
}

客户端:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class TcpClient {
    public TcpClient() throws IOException {
        Socket socket=new Socket("127.0.0.1",9999);
        OutputStream outputStream=socket.getOutputStream();
        outputStream.write("服务端你好,我来了".getBytes());
        System.out.println("执行了1");
        socket.close();
    }
    public static void main(String args[]) throws IOException {
        TcpClient tcpClient=new TcpClient();
    }
}

Udp

udp是没有服务端的,你可以给我发送数据,我也可以给你发送,下面程序的服务端只是虚设的,只要发送端确定发送对象的ip和端口号就可以直接发送数据包dataGramPocket。步骤如下:
①创建DataGramSocket对象;
②创建DataGramPocket数据包,参数包含了消息内容,长度,接收方的ip地址,端口号等(或创建一个空的数据包来接受信息);
③socket对象调用send(pocket) 方法将数据包发送(或调用receive(pocket) 方法将接收到的消息存到数据包中)。
④pocket提供了方法可以获取到数据内容。
例子:
发送端:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpClient {
    public UdpClient() throws IOException {
        DatagramSocket socket=new DatagramSocket();
        String msg="你好啊hhhhhh";
        InetAddress localhost=InetAddress.getByName("localhost");
        DatagramPacket packet=new DatagramPacket(msg.getBytes(),0,msg.getBytes().length, localhost,8888);
        socket.send(packet);
        socket.close();
    }
    public static void main(String args[]) throws IOException {
        UdpClient udpClient=new UdpClient();
    }
}

接收方:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpServer {
    public UdpServer() throws IOException {
        DatagramSocket socket=new DatagramSocket(8888);
        byte[] data=new byte[100];
        DatagramPacket packet=new DatagramPacket(data,0,data.length);
        socket.receive(packet);
        System.out.println(new String(packet.getData()));
        socket.close();
    }
    public static void main(String args[]) throws IOException {
        UdpServer udpServer=new UdpServer();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值