Java教程 专题
专题目录
您的位置:java > Java教程专题 > Java TCP服务器
Java TCP服务器
作者:--    发布时间:2019-11-20

java网络教程 - java tcp服务器


serversocket 类的一个对象表示java中的tcp服务器套接字。

serversocket 对象可以接受来自远程客户端的连接请求。

我们可以使用no-args构造函数创建一个未绑定的服务器套接字,并使用其bind()方法将其绑定到本地端口和本地ip地址。

例子

以下代码显示如何创建服务器套接字:

import java.net.inetsocketaddress;
import java.net.serversocket;

public class main {
  public static void main(string[] argv) throws exception {
    // create an unbound server socket
    serversocket serversocket = new serversocket();

    // create a socket address object
    inetsocketaddress endpoint = new inetsocketaddress("localhost", 12900);

    // set the wait queue size to 100
    int waitqueuesize = 100;

    // bind the server socket to localhost and at port 12900 with
    // a wait queue size of 100
    serversocket.bind(endpoint, waitqueuesize);

  }
}

例2

您可以通过使用以下任何构造函数在一个步骤中组合create,bind和listen操作。

等待队列大小的默认值为50。

本地ip地址的缺省值是通配符地址,即服务器计算机的所有ip地址。

serversocket(int port)
serversocket(int port, int waitqueuesize)
serversocket(int port, int waitqueuesize,  inetaddress  bindaddr)

您可以将套接字创建和绑定步骤合并为一个语句。

以下代码显示如何在端口12900创建服务器套接字,其中100作为等待队列大小,并在localhost回送地址。

serversocket serversocket  = new serversocket(12900, 100, inetaddress.getbyname("localhost"));

要接受远程连接请求,请调用服务器套接字上的 accept()方法。

accept()方法调用阻塞执行,直到来自远程客户端的请求到达其等待队列。


the following code calls on serversocket will wait  for a  new remote  connection request.
socket activesocket = serversocket.accept();

socket类包含两个方法 getinputstream() getoutputstream()用于读取和写入连接的套接字。

bufferedreader br  = new bufferedreader(new inputstreamreader(activesocket.getinputstream()));
bufferedwriter bw  = new bufferedwriter(new outputstreamwriter(activesocket.getoutputstream()));
string s = br.readline();
bw.write("hello"); 
bw.flush();

最后,使用套接字的close()方法关闭连接。关闭套接字还会关闭其输入和输出流。

activesocket.close();

以下代码显示如何创建服务器套接字。

import java.io.bufferedreader;
import java.io.bufferedwriter;
import java.io.inputstreamreader;
import java.io.outputstreamwriter;
import java.net.inetaddress;
import java.net.serversocket;
import java.net.socket;

public class main {
  public static void main(string[] args) throws exception {
    serversocket serversocket = new serversocket(12900, 100,
        inetaddress.getbyname("localhost"));
    system.out.println("server started  at:  " + serversocket);

    while (true) {
      system.out.println("waiting for a  connection...");

      final socket activesocket = serversocket.accept();

      system.out.println("received a  connection from  " + activesocket);
      runnable runnable = () -> handleclientrequest(activesocket);
      new thread(runnable).start(); // start a new thread
    }
  }

  public static void handleclientrequest(socket socket) {
    try{
      bufferedreader socketreader = null;
      bufferedwriter socketwriter = null;
      socketreader = new bufferedreader(new inputstreamreader(
          socket.getinputstream()));
      socketwriter = new bufferedwriter(new outputstreamwriter(
          socket.getoutputstream()));

      string inmsg = null;
      while ((inmsg = socketreader.readline()) != null) {
        system.out.println("received from  client: " + inmsg);

        string outmsg = inmsg;
        socketwriter.write(outmsg);
        socketwriter.write("\n");
        socketwriter.flush();
      }
      socket.close();
    }catch(exception e){
      e.printstacktrace();
    }

  }
}


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册