误信息:www.ptpress1.com.cn
使用Socket类连接服务器可以判断一台主机有哪些端口被打开。下面的代码是一个扫描本机有哪些端口被打开的程序。
package mysocket;
import java.net.*;
public class MyConnection1 extends Thread
{
private int minPort, maxPort;
public MyConnection1(int minPort, int maxPort)
{
this.minPort = minPort;
this.maxPort = maxPort;
}
public void run()
{
for (int i = minPort; i <= maxPort; i++)
{
try
{
Socket socket = new Socket("127.0.0.1", i);
System.out.println(String.valueOf(i) + ":ok");
socket.close();
}
catch (Exception e)
{
}
}
}
public static void main(String[] args)
{
int minPort = Integer.parseInt(args[0]), maxPort = Integer
.parseInt(args[1]);
int threadCount = Integer.parseInt(args[2]);
int portIncrement = ((maxPort - minPort + 1) / threadCount)
+ (((maxPort - minPort + 1) % threadCount) == 0 ? 0 : 1);
MyConnection1[] instances = new MyConnection1[threadCount];
for (int i = 0; i < threadCount; i++)
{
instances[i] = new MyConnection1(minPort + portIncrement * i, minPort
+ portIncrement - 1 + portIncrement * i);
instances[i].start();
}
}
}
上面代码通过一个指定的端口范围(如1至1000),并且利用多线程将这个端口范围分成不同的段进行扫描,这样可以大大提高扫描的效率。
可通过如下命令行去运行例程4-2。
java mysocket.MyConnection1 1000 3000 20
Java网络编程从入门到精通(13):使用Socket类接收和发送数据(3)
时间:2011-01-12
二、发送和接收数据
在Socket类中最重要的两个方法就是getInputStream和getOutputStream。这两个方法分别用来得到用于读取和写入数据的InputStream和OutputStream对象。在这里的InputStream读取的是服务器程序向客户端发送过来的数据,而OutputStream是客户端要向服务端程序发送的数据。
在编写实际的网络客户端程序时,是使用getInputStream,还是使用getOutputStream,以及先使用谁后使用谁由具体的应用决定。如通过连接邮电出版社网站(www.ptpress.com.cn)的80端口(一般为HTTP协议所使用的默认端口),并且发送一个字符串,最后再读取从www.ptpress.com.cn返回的信息。
package mysocket;
import java.net.*;
import java.io.*;
public class MyConnection2
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("www.ptpress.com.cn", 80);
// 向服务端程序发送数据
OutputStream ops = socket.getOutputStream();
OutputStreamWriter opsw = new OutputStreamWriter(ops);
BufferedWriter bw = new
|