黑马程序员_java套接字

来源:互联网 发布:淘宝起步怎么宣传 编辑:程序博客网 时间:2024/04/29 14:52

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
 

1、套接字Scket

 计算机中端口号被规定为一个16位的0~65536之间的整数,其中,0~1023被预先定义的服务通信占用,除非需要访问这些特定的服务,否则就应该使用1024~65535这些端口中的某一个进行通信,以免发生端口冲突。当两个程序需要通信时,它们可以通过使用Socket类建立套接字对象并连接在一起。

2、客户端的套接字对象

  客户端的程序使用Socket类建立负责连接到服务器的套接字对象。

  Socket的构造方法是Socket(String host, int port),参数host是服务器的IP地址,port是一个端口号。建立套接字对象可能发生IOException异常,建立套接字的方法是:

  try{ Socket mysocket = new Socket("http://192.168.49.139", 1880);

    }catch (IOException e){}

当套接字对象mysocket建立后,相当于一条通信“线路”已经建立起来,mysocket可以使用getInputStream()方法获得一个输入流,然后用这个输入流读取服务器放入“线路”的信息。mysocket还可以使用方法getOutputStream()获得一个输出流,然后用这个输出流将信息写入“线路”。

3、ServerSocket类

  为了能使客户成功的连接到服务器,服务器必须建立一个ServerSocket对象,该对象通过将客户端的套接字对象和服务器端的套接字对象连接起来,从而达到连接的目的。

  serverSocket的构造方法是ServerSocket(int port),port是一个端口号,port必须和客户呼叫的端口号相同,当建立ServerSocket对象时可能发生IOException异常,方法是:

  try{ServerSocket server_socket = new ServerSocket(1880);

  }catch (IOException e){}

如果端口已被占用,就会发生IOException异常,服务器建立后,就可以使用accept()方法将客户的套接字和服务器端的套接字连接起来

  try{ Socket socket sc = server_socket.accept();

  }catch (IOException e){}

所谓“接收”客户的套接字连接,就是accept()方法会返回一个和客户端Socket对象相连接的Socket对象。服务器端通过accept()方法得到的这个对象。

  连接建立后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddess对象,该对象含有客户端的IP地址和域名;同样,客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有服务器端的IP地址和域名。

  双方通信完毕后,套接字应使用close()方法关闭套接字连接。

例子:

客户端每隔500ms向服务器发送一个英文小写字母,服务器收到小写字母后将对应的大写字母发回给客户端。

1、客户端

import java.io.*;
import java.net.*;

public class Client{
 public static void main(String args[]){
  Socket mysocket;
  DataInputStream in = null;
  DataOutputStream out = null;
  try{
   mysocket = new Socket("127.0.0.1",4331);
   in = new DataInputStream(mysocket.getInputStream()); //获取输入流
   out = new DataOutputStream(mysocket.getOutputStream()); //获取输出流
   char c = 'a';
   while (true){
    if (c > 'z') //若大于z则重新从a开始
     c = 'a';
    out.writeChar(c);
    char s = in.readChar();
    System.out.println("客户收到:" + s);
    c++;
    Thread.sleep(500);
   }
  }catch (Exception e){
   System.out.println("服务器已经断开" + e);
  }
 }
}

2、服务器端


import java.io.*;
import java.net.*;

public class Server{
 public static void main(String args[]){
  ServerSocket server = null;
  Socket you = null;
  DataOutputStream out = null;
  DataInputStream in = null;
  try{
   server = new ServerSocket(4331);
  }catch (IOException e){
   System.out.println(e);
  }
  try{
   System.out.println("等待客户呼叫");
   you = server.accept(); //阻塞状态,除非有客户呼叫
   out = new DataOutputStream(you.getOutputStream());
   in = new DataInputStream(you.getInputStream());
   while (true){
    char c = in.readChar();
    System.out.println("服务器收到:" + c);
    out.writeChar((char)(c - 32));
    Thread.sleep(500);
   }
  }catch (Exception e){
   System.out.println("客户已断开" + e);
  }
 }
}

 

原创粉丝点击