学习JAVA.day11 Socket编程

学习JAVA.day11 Socket编程

在JAVA网络编程中,服务器和客户端存在两种类型的套接字,区别于C++/C;
下边对Socket 和ServerSocket 进行说明:
1.Socket 套接字
构造方法:
Socket()
通过系统默认类型的 SocketImpl 创建未连接套接字
Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(InetAddress host, int port, boolean stream)
已过时。 Use DatagramSocket instead for UDP transport.
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程地址上的指定远程端口。
Socket(Proxy proxy)
创建一个未连接的套接字并指定代理类型(如果有),该代理不管其他设置如何都应被使用。
Socket(SocketImpl impl)
使用用户指定的 SocketImpl 创建一个未连接 Socket。
Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(String host, int port, boolean stream)
已过时。 使用 DatagramSocket 取代 UDP 传输。
Socket(String host, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口。

客户端指定连接主机 IP 地址和 Port 端口号,进行连接,当指定主机不存在,则报错;
服务器和客户端的通信就依靠客户端Socket进行通信;

2.ServerSocket 套接字
构造方法:
ServerSocket()
创建非绑定服务器套接字。
ServerSocket(int port)
创建绑定到特定端口的服务器套接字。
ServerSocket(int port, int backlog)
利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。
ServerSocket(int port, int backlog, InetAddress bindAddr)
使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。

3.套接字常用方法
void bind(SocketAddress bindpoint) 将套接字绑定到本地地址。
void connect(SocketAddress endpoint) 将此套接字连接到服务器。
Socket ServerSocket.accept() 侦听并接受到此套接字的连接。 服务器阻塞等待客户端连接,连接后获得返回的客户端Socket;
close() 关闭此套接字。释放资源;
InputStream getInputStream() 返回此套接字的输入流。
OutputStream getOutputStream() 返回此套接字的输出流。

4.小练习——C/S大小写转换
服务器源码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class Demo01Server {
    public static void main(String[] args) throws IOException {
        //1.创建服务器Socket绑定主机端口号
        ServerSocket server = new ServerSocket(8888);
        //2.调用accept进行等待连接,并获取客户端Socket
        Socket clientSocket = server.accept();
        //3.获取套接字类的输入流InputStream
        InputStream in = clientSocket.getInputStream();
        //4.调用输出流InputStream的read方法
        byte[] arr = new byte[1024];
        int len = in.read(arr);
        //5.获取套接字类的输出流OutputStream
        OutputStream out = clientSocket.getOutputStream();
        //6.调用输出流OutputStream的write方法
        String str = new String(arr,0,len);
        System.out.println("已收到客户端数据"+str);
        out.write(str.toUpperCase().getBytes(StandardCharsets.UTF_8));
        //7.释放资源
        clientSocket.close();
        server.close();
    }
}

客户端源码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;

public class Demo02Client {
    public static void main(String[] args) throws IOException {
        //1.创建Socket套接字,并设定链接主机地址及IP
        Socket client = new Socket("127.0.0.1",8888);
        //2.获取套接字类的输出流OutputStream
        OutputStream out = client.getOutputStream();
        //3.调用输出流OutputStream的write方法
        out.write("abcdefghijklmnopqrstuvwxyz".getBytes(StandardCharsets.UTF_8));
        //4.获取套接字类的输入流InputStream
        InputStream in = client.getInputStream();
        //5.调用输入流InputStream的read方法
        byte[] arr = new byte[1024];
        int len = in.read(arr);
        String str = new String(arr,0,len);
        System.out.println("已收到服务器端回复数据"+str);
        //6.释放资源
        client.close();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值