zoukankan      html  css  js  c++  java
  • Java学习之Socket编程

    什么是Socket

    Java中的Socket编程其实就是网络编程,一般使用基于TCP/IP协议的Socket编程。所有关于Socket编程的API都在Java.net包里,一般实现客户端和服务器端之间的通讯。

    Socket通讯的过程

    Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。

    对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:

    1. 创建Socket;
    2. 打开连接到Socket的输入/出流;
    3. 按照一定的协议对Socket进行读/写操作;
    4. 关闭Socket。

      socket编程要求

      服务器的位置必须得是固定的,
      1
      ServerSocket server=new ServerSocket(6789);

    注:端口号的分配必须是唯一的,因为端口是为了唯一标识每台计算机唯一服务的。另外端口号是从0到65535之间的,前1024个端口已经被TCP/IP作为保留端口,因此你所分配的端口只能是1024个之后的。

    1
    Socket socket = server.accept();

    注:accept方法是一个阻塞方法,在服务器端与客户端之间建立联系之前会一直等待阻塞。

    在客户端中,用如下代码打开一个socket:

    1
    Socket client = new Socket("127.0.0.1", 8919); //两个参数(host,port)

    注:host即客户端需要连接的机器,port就是服务器端用来监听请求的端口。

    例子:

    我们从客户端的Socket对象中得到OutputStream对象,然后写入数据后。很类似文件IO的处理代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class ClientSocket {
    public static void main(String args[]) {
    String host = "127.0.0.1";
    int port = "8919";
    try{
    Socket client = new Socket(host ,port );
    Writer writer = new OutputStreamWriter(client.getOutputStream());
    writer.writer("Hello From Client");
    writer.flush();
    writer.close();
    client.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    在服务器端创建一个Socket,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class ServerClient {
    public static void main(String[] args) {
    int port = 8919;
    try {
    ServerSocket server = new ServerSocket(port);
    Socket socket = server.accept();
    Reader reader = new InputStreamReader(socket.getInputStream());
    char chars[] = new char[1024];
    int len;
    StringBuilder builder = new StringBuilder();
    while ((len=reader.read(chars)) != -1) {
    builder.append(new String(chars, 0, len));
    }
    System.out.println("Receive from client message=: " + builder);
    reader.close();
    socket.close();
    server.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

    支持多客户的client/server程序

    前面的Client/Server程序只能实现Server和一个客户的对话。在实际应用中,往往是在服务器上运行一个永久的程序,它可以接收来自其他多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。

  • 相关阅读:
    第89节:Java中的反射技术
    Web前端JQuery入门实战案例
    Web前端JQuery入门实战案例
    Web前端JQuery面试题(三)
    Web前端JQuery面试题(三)
    Web前端JQuery面试题(二)
    Web前端JQuery面试题(二)
    Web前端JQuery面试题(一)
    Web前端JQuery面试题(一)
    第88节:Java中的Ajax和ASP.NET和TCP/IP 教程和JSON
  • 原文地址:https://www.cnblogs.com/xiaoguozi0218/p/4770773.html
Copyright © 2011-2022 走看看