網絡應用分為客戶端和服務端兩部分
在本文中
一
在客戶端可以通過兩種方式來連接服務器
其實這兩種方式從本質上來看是一種方式
在很多程序設計語言或開發工具中(如C/C++
通過Socket類連接服務器程序最常用的方法就是通過Socket類的構造函數將IP或域名以及端口號作為參數傳入Socket類中
package mysocket;
import
public class MyConnection
{
public static void main(String[] args)
{
try
{
if (args
{
Socket socket = new Socket(args[
System
}
else
System
}
catch (Exception e)
{
System
}
}
}
在上面的中
測試正確的IP
java mysocket
輸出結果
測試錯誤的IP
java mysocket
輸出結果
注
測試正確的域名
java mysocket
輸出結果
測試錯誤的域名
java mysocket
輸出結果
使用Socket類連接服務器可以判斷一台主機有哪些端口被打開
package mysocket;
import
public class MyConnection
{
private int minPort
public MyConnection
{
this
this
}
public void run()
{
for (int i = minPort; i <= maxPort; i++)
{
try
{
Socket socket = new Socket(
System
socket
}
catch (Exception e)
{
}
}
}
public static void main(String[] args)
{
int minPort = Integer
int threadCount = Integer
int portIncrement = ((maxPort
+ (((maxPort
MyConnection
for (int i =
{
instances[i] = new MyConnection
+ portIncrement
instances[i]
}
}
}
上面代碼通過一個指定的端口范圍(如
可通過如下命令行去運行例程
java mysocket
二
在Socket類中最重要的兩個方法就是getInputStream和getOutputStream
在編寫實際的網絡客戶端程序時
package mysocket;
import
import java
public class MyConnection
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket(
// 向服務端程序發送數據
OutputStream ops = socket
OutputStreamWriter opsw = new OutputStreamWriter(ops);
BufferedWriter bw = new BufferedWriter(opsw);
bw
bw
// 從服務端程序接收數據
InputStream ips = socket
InputStreamReader ipsr = new InputStreamReader(ips);
BufferedReader br = new BufferedReader(ipsr);
String s =
while((s = br
System
socket
}
}
在編寫上面代碼時要注意如下兩點
三
到現在為止
可以引起網絡連接關閉的情況有以下
雖然這
在Socket對象被關閉後
Socket socket = new Socket();
System
除了isClose方法
package mysocket;
import
public class MyCloseConnection
{
public static void printState(Socket socket
{
System
System
if (socket
System
else
System
System
}
public static void main(String[] args) throws Exception
{
Socket socket
socket
printState(socket
socket
printState(socket
socket
printState(socket
socket
printState(socket
}
}
運行上面的代碼後
socket
socket
socket
socket
socket
socket
socket
socket
socket
socket
socket
socket
從輸出結果可以看出
雖然在大多數的時候可以直接使用Socket類或輸入輸出流的close方法關閉網絡連接
package mysocket;
import
public class MyCloseConnection
{
public static void printState(Socket socket)
{
System
System
System
System
}
public static void main(String[] args) throws Exception
{
Socket socket = new Socket(
printState(socket);
socket
printState(socket);
socket
printState(socket);
}
}
在運行上面的代後
isInputShutdown:false
isOutputShutdown:false
isClosed:false
isInputShutdown:true
isOutputShutdown:false
isClosed:false
isInputShutdown:true
isOutputShutdown:true
isClosed:false
從輸出結果可以看出
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25915.html