Java网络基础之套接字

一、按照套接字在网络中的作用分为

服务器端ServerSocket:   服务器端的套接字始终在监听是否有连接请求,如果发现客户机端Socket向服务器发出连接请求,则服务器端Socket向客户机端Socket发回“接受”的消息。

客户机端Socket: 当客户机端发出的建立连接的请求被服务器端接受时,客户机上就会创建一Socket对象。利用这个Socket对象,客户机就可以和服务器进行通信了。

二、 Socket

 Socket类常用的构造方法如下:

 Socket(InetAddressaddress, intport)

 此方法创建一个要连接的远程主机地址为address、端口号为port套接字。 (若使用本地主机作为服务器则应写“localhost”)。

  构造一个新的Socket实例后,可使用:getInputStream()方法获得一个InputStream类的实例或getOutputStream()方法获得一个OutputStream类的实例,从某个主机接收信息发送信息到某个主机。

  通过Socket类也可用getInetAddress()getLocalAddress()方法返回一个InetAddress类的实例,即所连接到的主机的IP地址以及本地IP地址。

  通过Socket类还可用getPort()方法返回所连接到的主机的端口号,getLocalPort()方法返回正在使用的本地端口号。

三、ServerSocket类

  当服务器建立了ServerSocket套接字对象以后,可以使用该对象的accept()方法接受客户端请求的套接字连接。

serverSocket.accept();

  方法调用后,服务器处于阻塞状态,等待客户端的连接请求,在接到客户端请求的套接字连接请求以后,该方法将返回Socket对象

Scocketsc=serverSocket.accept();

这个Socket对象是已经和客户端建立好连接的套接字,可以通过这个Socket对象获取客户端的输入输出流来实现数据发送和接受。

四、连接的关闭!

n每一个Socket存在时,都将占用一定的资源,在Socket对象使用完毕时,要其关闭。关闭Socket可以调用SocketClose()方法。

n在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出该首先关闭,然后再关闭Socket

n  os.close();  //关闭输出流

n  is.close();  //关闭输出流

  socket.close();  //关闭socket

五、example


客户端向服务器端发送数据
服务器端显示客户端发送的数据
当服务器端收到“Exit”,服务器退出

public classServer {

     public staticvoid main(String args[]) {

     try {    //创建服务器到解字

  ServerSocketserver= new ServerSocket(9527);

  System.out.println("服务器启动完毕");

  Socket socket= server.accept();//  等待客户端连接

  System.out.println("创建客户连接");

  InputStreaminput= socket.getInputStream();

                                               // 获取Socket输入

           InputStreamReaderisreader= new       

                                                           InputStreamReader(input);

           BufferedReaderreader= new BufferedReader(isreader);


          while (true) {

           String str= reader.readLine();

           if(str.equals("exit"))//如果接收到exit

           break;// 则退出服务器

           System.out.println("接收内容:"+str);//输出接收内容

}

  System.out.println("连接断开");

  reader.close();//按顺序关闭连接

  isreader.close();

  input.close();

  socket.close();

  server.close();

}catch (IOException e) {

e.printStackTrace();

}}}

n

publicclass Client{

    public static void main(String[] args){

    try {

  Socket socket=new Socket("localhost",9527);

  // 创建连接服务器的Socket

  OutputStreamout = socket.getOutputStream();

  // 获取Socket输出

  out.write("这是我第一次访问服务器\n".getBytes());

  // 向服务器发送数据

  out.write("Hello\n".getBytes());

  out.write("exit\n".getBytes());//发送退出信息

     } catch (UnknownHostException e) {

  e.printStackTrace();

     } catch (IOException e) { 

  e.printStackTrace();}}}












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值