Java TCP/IP协议笔记之TCP 套接字:TCP 客户端

TCP 客户端

    

package network;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

public class TCPEchoClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String server = args[0];
		byte[] data = args[1].getBytes();
		int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;
		try {
			Socket socket = new Socket(server, servPort);
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			out.write(data);
			int totalBytesRcvd = 0;
			int bytesRcvd;
			while (totalBytesRcvd < data.length) {
				if ((bytesRcvd = in.read(data, totalBytesRcvd, data.length
						- totalBytesRcvd)) == -1)
					throw new SocketException("Connection closed prematurely");
				totalBytesRcvd += bytesRcvd;
				// data array is full
				System.out.println("Received: " + new String(data));
				socket.close();
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}
    read方法三个参数:1) 接受数据的数组 

                                        2)接收的字节存放的位置,字节偏移量

                                        3)放入数组的最大字节数

   read方法在没有数据读时会阻塞等待,直到有新的数据可读。如果socket的另一端关闭,read方法返回-1。


Socket创建

    Socket(InetAddress remoteAddr, int remotePort) //远程链接地址,使用本地socket地址和可用端口地址
    Socket(String remoteHost, int remotePort) //远程链接地址,使用本地socket地址和可用端口地址
    Socket(InetAddress remoteAddr, int remotePort, InetAddress localAddr, int localPort) //远程链接地址,使用指定socket地址和端口地址

    Socket(String remoteHost, int remotePort, InetAddress localAddr, int localPort)    

    Socket()  

Socket:  操作

  void connect(SocketAddress destination) 
  void connect(SocketAddress destination, int timeout) 
  InputStream getInputStream() 
  OutputStream getOutputStream() 
  void close() 
  void shutdownInput() 
  void shutdownOutput() 

  connect方法使指定的终端打开一个TCP链接,socketAddress抽象类代表了socket的一般格式,它的子类InetSocketAddress是针对TCP/IP的特殊格式。与远程主机通信是通过与套接字关联的输入输出流来实现的。

  close()方法套接字及其关联的输出流

  shutdownInput()关闭TCP流的输入端,任何没有读取的数据都被丢弃,包括被socket缓存、正在传输、即将到达的数据。

  shutDownOutput()关闭TCP流的输出端。但已经写入套接字流的将尽量保证发送到另一端。

Socket:  获取/检测属性

  InetAddress getInetAddress() 

  int getPort() 

  InetAddress getLocalAddress()

  int getLocalPort() 

  SocketAddress getRemoteSocketAddress() 

  SocketAddress getLocalSocketAddress() 

InetSocketAddress:  创建与访问

  InetSocketAddress(InetAddress addr, int port)

  InetSocketAddress(int port) //使用特殊的"任何"地址来创建实例

  InetSocketAddress(String hostname, int port) //接收字符串主机名的构造函数会尝试将其解析成相应的 IP 地址

  static InetSocketAddress createUnresolved(String host, int port)//不对主机名进行解析情况下创建实例
  boolean isUnresolved()//是否可达

  InetAddress getAddress() 

  int getPort()

  String getHostName()

  String toString()

  InetSocketAddress类为主机地址和端口创建了一个唯一不可变的组合,静态方法createUnresolved,创建 InetSocketAddress 实例时没有对主机名进行解析,或解析失败,isUnresolved()方法将返回 true。


    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值