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 客戶端
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.