Java TCP/IP学习笔记之TCP服务端

TCP服务端


    服务端的工作就是一个通信终端,并被动等待客户端的链接。

package network;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;

public class TCPEchoServer {
	private static final int BUFSIZE = 32;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int servPort = Integer.parseInt(args[0]);
		try {
			// 创建一个ServerSocket实例并指定本地端口。此套接字的功能是侦听该指定端口收到的连接。
			ServerSocket servSock = new ServerSocket(servPort);
			int recvMsgSize;
			byte[] receiveBuf = new byte[BUFSIZE];
			//重复执行
			while (true) {
				//调用 ServerSocket 的 accept()方法以获取下一个客户端连接,
				//基于新建立的客户端连接,创建一个 Socket 实例,并由 accept()方法返回。
				Socket clntSock = servSock.accept();
				SocketAddress clientAddress = clntSock.getRemoteSocketAddress();
				System.out.println("Handling client at " + clientAddress);
				//使用所返回的 Socket实例的 InputStream和 OutputStream与客户端进行通信
				InputStream in = clntSock.getInputStream();
				OutputStream out = clntSock.getOutputStream();
				while ((recvMsgSize = in.read(receiveBuf)) != -1) {
					out.write(receiveBuf, 0, recvMsgSize);
				}
				//使用 Socket 类的 close()方法关闭该客户端套接字连接
				clntSock.close();

			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

    ServerSocket的唯一目的是新的TCP链接请求创建一个已链接的socket实例。当服务器准备好处理请求时,调用accept(),该方法阻塞等待,直到有向 ServerSocket 实例指定端口的新的连接请求到来。accept()方法返回一个socket实例,该实例链接到客户端的套接字,并且准备好了数据。


ServerSocket:  创建

    ServerSocket(int localPort) 
    ServerSocket(int localPort, int queueLimit) 
    ServerSocket(int localPort, int queueLimit, InetAddress localAddr) 
    ServerSocket()

    端口号的有效范围是 0-65535,连接队列的大小以及本地地址也可以选择设置,最大队列长度不是一个严格的限制,也不能用来控制客户端的总数。

ServerSocket:  操作 

    void bind(int port) 
    void bind(int port, int queuelimit) 
    Socket accept() 
    void close() 

ServerSocket:  获取属性

    InetAddress getInetAddress() 
    SocketAddress getLocalSocketAddress() 
    int getLocalPort() 

    以上方法将返回服务器端套接字的本地地址和端口号。

    与 Socket 类不同的是,ServerSocket 没有相关联的 I/O 流。然而,它有另外一些称为选项(options)的属性,并能通过多种方法对选项进行控制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值