A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

什么是Socket通信机制,客户端如何与服务器进行连接?

6 个回复

倒序浏览
Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.
回复 使用道具 举报
        Socket套接字起源于美国泊克利大学。方便了开发网络应用程序。TCP面向连接的可靠传输协议具有数据确认和数据重传机制,保证了发送数据一定能到达通信的对方,一般在对数据完整性要求比较高的场合使用。 UPD协议是无连接,不可靠的传输协议,不具有数据确认和数据重传机制,一般在对数据完整性要求比较低的场合使用。 IP 网络中每台主机都必须有一个惟一IP地址,IP地址是个逻辑地址.因特网上的IP地址具有全球惟一性,32位,4个字节,常用点分十进制的格式表示。
      socket是套接字的意思,一般用来描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。    socket非常类似于电话插座,以一个国家级电话网为例,电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,这也与socket机制非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。抽象出来,socket实质上提供了进程通信的端点,进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的,正如打电话之前,双方必须各自拥有一台电话机一样。
回复 使用道具 举报
所谓socket,我们理解为“插座”。服务器端一“插”,客户端一“插”,即实现了通信的通路,那么如何形成链接呢?
客户端:
Socket s = null;
try {
                        s = new Socket("127.0.0.1",8555);  //参数内是所连接服务器端的IP地址和接口,服务器端会有进程在这个端口上进行监听
                        System.out.println("connected!");   
                } catch (UnknownHostException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }

服务器端:
try {
                        ServerSocket ss = new ServerSocket(8555);//这里与客户端申请的接口必须一致
                        while(true){
                                Socket s = ss.accept();//接受客户端申请的连接
                                System.out.println("a client connected!");
                                DataInputStream dis = new DataInputStream(s.getInputStream());
                                String str = dis.readUTF();
                                System.out.println(str);
                                dis.close();
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
嗯,Socket通信机制中,在客户端是Socket 在服务器端有ServerSocket通过监听等待有请求就生成一个Socket。Socket就像码头一样发送数据,从客户端Socket到服务器端Socket,从服务器端到客户端,通过InputStream与OutputStream流来沟通。
  1. public class SocketClient {

  2.         public static void main(String[] args) {
  3.                 try
  4.                 {
  5.                        
  6.                         Socket s=new Socket("127.0.0.1",8001);
  7.                         InputStream ips=s.getInputStream();
  8.                         OutputStream ops=s.getOutputStream();
  9.                         BufferedReader brNet=new BufferedReader(new InputStreamReader(ips));
  10.                         System.out.println(brNet.readLine());//打印从服务器传来的字符串
  11.                         PrintWriter pw=new PrintWriter(ops,true);
  12.                         BufferedReader brkey=new BufferedReader(new InputStreamReader(System.in));
  13.                         //包装从键盘输入的字符流
  14.                         while(true)
  15.                         {
  16.                                 String strWord=brkey.readLine();
  17.                                 pw.println(strWord);
  18.                                 if(strWord.equals("quit"))
  19.                                 {
  20.                                         break;
  21.                                 }
  22.                                 System.out.println(brNet.readLine());
  23.                         }
  24.                 }
  25.                 catch(Exception e)
  26.                 {
  27.                         e.printStackTrace();
  28.                 }
  29.         }
  30. }

  31. public class SocketServer {

  32.         public static void main(String [] args)
  33.         {
  34.                 boolean running=true;
  35.                 ServerSocket serversocket;//建立服务器端引用
  36.                 try
  37.                 {
  38.                         serversocket=new ServerSocket(8001);//指定服务器端监听端口号
  39.                         while(running)
  40.                         {
  41.                                 Socket socket=serversocket.accept();//一直监听连接请求
  42.                                 InputStream is=socket.getInputStream();//获得输入流
  43.                                 OutputStream os=socket.getOutputStream();//获得输出流
  44.                                 BufferedReader br=new BufferedReader(new InputStreamReader(is));
  45.                                 //包装输入流
  46.                                 PrintWriter pw=new PrintWriter(os);//包装输出流
  47.                                 pw.println("连接成功");
  48.                         }
  49.                         serversocket.close();
  50.                 }
  51.                 catch(Exception e)
  52.                 {
  53.                         e.printStackTrace();
  54.                 }
  55.                
  56.         }

  57. }
复制代码
回复 使用道具 举报
额,是不是没看视频,老师讲的肯定比我们哪个讲的都详细啊!看了不懂,再交流啊
回复 使用道具 举报
Java语言里面,基于 TCP 协议实现网络通信的类有两个:在客户端的 Socket 类和在 服务器端的 ServerSocket 类。 在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket 实例。在客户端通过规定一个主机和端口号创建一个 socket 实例,连到服务器上。 ServerSocket 类的 accept 方法接受来自Client端的请求信息。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马