package org.zhangmeng.test.eg_socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;
/***
* Socket 创建
* Socket(InetAddress remoteAddr, int remotePort)
* Socket(String remoteHost, int remotePort) 多个接口的主机上指定本地地址是有用的。
* Socket(InetAddress remoteAddr, int remotePort,InetAddress localAddr, int localPort)
* 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() 关闭TCP输入流,任何没有读取的数据将被舍弃
* void shutdownOutput()
* 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)
* static InetSocketAddress createUnresolved(String host, int port)
* boolean isUnresolved()
* InetAddress getAddress()
* int getPort()
* String getHostName()
* String toString()
*/
public class TCPEchoClient {
public static void main(String[] args) throws IOException {
if(args.length < 2 || args.length > 3){
throw new IllegalArgumentException("Parameter(s) <Server> <Word> [<Port>]");
}
String server = args[0];
//将要发送的字节数组
byte[] data = args[1].getBytes();
int serverPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;
//创建Socket套接字
Socket socket = new Socket(server, serverPort);
System.out.println("Connected to server .. sending echo string .");
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
//发送数据到socket server
out.write(data);
int totalBytesRcvd = 0;
int bytesRcvd;
while(totalBytesRcvd < data.length) {
//读入数据 一个write发送了数据,server可能分多个chunks接收到信息,返回时也被分割为多块数据返回。
if((bytesRcvd = in.read(data,totalBytesRcvd,data.length - totalBytesRcvd)) == -1){
throw new SocketException("Connection closed prematurely");
}
totalBytesRcvd += bytesRcvd;
}
System.out.println("Received:" + new String(data));
socket.close();
}
}
4、java socket TCP 客户端
最新推荐文章于 2024-06-12 18:20:56 发布