java 网络编程【4】 TCP详解及其相关实例

(1)简单的TCP服务程序。


(2)TCP服务器程序模型的编写要点


(3)TCP网络程序的工作原理



public class TcpServer {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		ServerSocket ss = new ServerSocket(8001);
		// accept方法 在没有客户端连接的时候 一直在阻塞状态。
		Socket s = ss.accept();
		
		InputStream ips = s.getInputStream();
		OutputStream ops = s.getOutputStream();
		// 写入到  客户端的程序。
		ops.write("welcome".getBytes());
		// 读取一行数据。 字节流与字符流之间的转化。
		BufferedReader br = new BufferedReader(new InputStreamReader(ips));
		System.out.println(br.readLine());
		
		// 调用  输入流的read方法   读取  客户端的内容。
		/*
			在 telnet中   输入abc  只显示 a。
			 
			  byte buf[] = new byte[1024];
			int len = ips.read(buf);// 把读到的内容  放入 buf中。
			System.out.println(new String(buf,0,len));
			
			ips.close();
		
		*/
		
		br.close();
		ops.close();
		s.close();
		ss.close();
		
	}

}

ServerSocket

public ServerSocket()
             throws IOException
创建非绑定服务器套接字。

抛出:
IOException - 如果打开套接字时发生 IO 错误。

ServerSocket

public ServerSocket(int port)
             throws IOException
创建绑定到特定端口的服务器套接字。端口 0 在所有空闲端口上创建套接字。

传入连接指示(对连接的请求)的最大队列长度被设置为 50。如果队列满时收到连接指示,则拒绝该连接。

如果应用程序已指定服务器套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际套接字实现。否则创建“普通”套接字。

如果存在安全管理器,则首先使用 port 参数作为参数调用其 checkListen 方法,以确保允许该操作。这可能会导致 SecurityException 异常。

参数:
port - 端口号;或者为 0,表示使用任何空闲端口。
抛出:
IOException - 如果打开套接字时发生 I/O 错误。
SecurityException - 如果安全管理器存在并且其 checkListen 方法不允许进行该操作。
另请参见:
SocketImpl, SocketImplFactory.createSocketImpl(), setSocketFactory(java.net.SocketImplFactory), SecurityManager.checkListen(int)

ServerSocket

public ServerSocket(int port,
                    int backlog)
             throws IOException
利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。端口号 0 在所有空闲端口上创建套接字。

传入连接指示(对连接的请求)的最大队列长度被设置为 backlog 参数。如果队列满时收到连接指示,则拒绝该连接。

如果应用程序已指定服务器套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际套接字实现。否则创建“普通”套接字。

如果存在安全管理器,则首先使用 port 参数作为参数调用其 checkListen 方法,以确保允许该操作。这可能会导致 SecurityException 异常。

backlog 参数必须是大于 0 的正值。如果传递的值等于或小于 0,则使用默认值。

参数:
port - 指定的端口;或者为 0,表示使用任何空闲端口。
backlog - 队列的最大长度。
抛出:
IOException - 如果打开套接字时发生 I/O 错误。
SecurityException - 如果安全管理器存在并且其 checkListen 方法不允许进行该操作。
另请参见:
SocketImpl, SocketImplFactory.createSocketImpl(), setSocketFactory(java.net.SocketImplFactory), SecurityManager.checkListen(int)

ServerSocket

public ServerSocket(int port,
                    int backlog,
                    InetAddress bindAddr)
             throws IOException
使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。 bindAddr 参数可以在 ServerSocket 的多宿主主机 (multi-homed host) 上使用,ServerSocket 仅接受对其地址之一的连接请求。如果 bindAddr 为 null,则默认接受任何/所有本地地址上的连接。端口必须在 0 到 65535 之间(包括两者)。

如果存在安全管理器,则此方法使用 port 作为参数调用其 checkListen 方法,以确保允许该操作。这可能会导致 SecurityException 异常。

backlog 参数必须是大于 0 的正值。如果传递的值等于或小于 0,则使用默认值。

参数:
port - 本地 TCP 端口
backlog - 侦听 backlog
bindAddr - 要将服务器绑定到的 InetAddress
抛出:
SecurityException - 如果安全管理器存在并且其 checkListen 方法不允许进行该操作。
IOException - 如果打开套接字时发生 I/O 错误。
从以下版本开始:
JDK1.1
另请参见:
SocketOptions, SocketImpl, SecurityManager.checkListen(int)

方法:

accept
public Socket accept()
              throws IOException侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 
创建新套接字 s,如果存在安全管理器,则使用 s.getInetAddress().getHostAddress() 和 s.getPort() 作为参数调用安全管理器的 checkAccept 方法,以确保允许该操作。这可能会导致 SecurityException 异常。 




返回:
新套接字 
抛出: 
IOException - 如果等待连接时发生 I/O 错误。 
SecurityException - 如果安全管理器存在并且其 checkAccept 方法不允许进行该操作。 
SocketTimeoutException - 如果以前使用 setSoTimeout 设置了超时并且已到达超时值。 
IllegalBlockingModeException - 如果此套接字具有关联的通道、通道处于非阻塞模式并且不存在准备接受的连接
另请参见:
SecurityManager.checkAccept(java.lang.String, int)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值