一、Socket
1.概念:1)Socket:也叫"套接字",主要用于网络通信(网络通信由两大块组成:服务端和客户端)
用来描述IP地址和端口号信息等。
2)服务端和客户端
服务端通常使用的是ServerSocket,用来监听客户端的连接。
客户端同时使用Socket,向服务端发送请求连接。
2.套接字的使用
1)在客户端中应该指定要发送请求的ip地址和端口号。
端口号:1-1000,通常1024以内都是操作系统保留的端口号不应该使用,
可以使用大于1024的数字;
2)在服务端需要制定要监听的端口号,同时等待连接。
3.网络通信可以使用Socket进行信息的传输。
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
通过相应输入输出进行数据的读写。
二、Socket-Client
1 .客户端:ClientSocket socket = new Socket("localhost",8888);
1)getLocalPort():获取本地的端口号;
2) getPort():获取的是远程服务器的端口号;
2.Socket的常用API
InetAddress add= socket.getLocalAddress();//获取本地地址
add.getHostAddress()
add.getLocalHost()
add.getHostName()
三、Socket-Server
1.服务端:ServerSocketServerSocket server =
new ServerSocket(8888);//创建一个服务器对象,指定端口号为8888
2.调用accept()方法监听客户端的连接, 方法有阻塞效果。
即:Socket socket = server.accept();
四、相互通信
1.Client1:
public class Client { public static void main(String[] args) { try { Socket socket = new Socket("localhost",8888);//客户端发送请求连接, /** 同时指定要发送请求的ip地址和端口号。 * Socket套接字的常用API */ //获取本地地址 InetAddress add= socket.getLocalAddress(); System.out.println("主机地址"+add.getHostAddress()); System.out.println("本地主机"+add.getLocalHost()); System.out.println("主机名:"+add.getHostName()); /* * getLocalPort(): * 获取本地的端口号 */ System.out.println("本地端口号:"+socket.getLocalPort()); /* * getPort(): * 获取的是远程服务器的端口号 */ System.out.println("端口号:"+socket.getPort()); } catch (Exception e) { e.printStackTrace(); } } }
2.Server1
ServerSocket ss=new ServerSocket(8888);//创建服务器对象,指定端口号
public class Server { public static void main(String[] args) { try { //创建一个服务器对象,指定端口号为8888 ServerSocket server = new ServerSocket(8888); /* * 调用accept()方法监听客户端的连接, * 方法有阻塞效果。 */ System.out.println("---等待客户端连接------"); Socket socket = server.accept(); System.out.println("---一个客户端连接成功------"); System.out.println("端口号:"+socket.getPort()); System.out.println("本地端口号:"+socket.getLocalPort()); } catch (Exception e) { e.printStackTrace(); } } }
3. 执行结果
①先运行服务端②再运行客户端