Socket 套接字的概念、客户端服务端使用方法--附案例

本文详细介绍了Socket的基本概念和服务端客户端的工作原理。包括如何使用Socket进行网络通信、建立连接、指定IP地址及端口号等内容。

一、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. 执行结果

                    ①先运行服务端②再运行客户端

                                

              

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值