一、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 .客户端:Client
Socket 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.服务端:ServerSocket
ServerSocket 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. 执行结果
①先运行服务端②再运行客户端