一对一的TCP程序
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* @ClassName MyServer01
* @Description 服务器端
* @Author lzq
* @Date 2018/12/11 20:45
* @Version 1.0
**/
public class MyServer01 {
public static void main(String[] args) {
start();
}
private static void start() {
ServerSocket serverSocket = null; //声明ServerSocket对象
Socket socket = null; //声明Socket对象
InputStream in = null;
OutputStream out = null;
try {
serverSocket = new ServerSocket(8000); //实例化ServerSocket对象
System.out.println("等待客户端连接......");
socket = serverSocket.accept();//实例化Socket对象,阻塞等待连接
System.out.println("客户端连接上!!1");
System.out.println("客户端来自:"+socket.getInetAddress().getHostAddress());//获取客户端Ip
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
String strMassage = null;
Scanner scanner = new Scanner(System.in);
boolean flag = true; //标记
while(flag) {
strMassage = ((DataInputStream) in).readUTF(); //读取客户端发送信息
if(!strMassage.equals("bye")) { //若信息为bye则退出
System.out.println("客户端消息:"+strMassage); //输出客户端内容
System.out.println("回复客户端:");
strMassage = scanner.next(); //回复客户端
((DataOutputStream) out).writeUTF(strMassage); //向客户端发送消息
out.flush();
}else {
((DataOutputStream) out).writeUTF("bye"); //给人家也发送bye,让它退出
flag = false;
}
}
in.close();
out.close();
serverSocket.close();
socket.close();
System.out.println("服务器退出!!");
}catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
/**
* @ClassName Client01
* @Description 客户端
* @Author lzq
* @Date 2018/12/11 20:46
* @Version 1.0
**/
public class Client01 {
public static void main(String[] args) {
start();
}
private static void start() {
Socket socket = null; //声明Socket对象
InputStream in = null;
OutputStream out = null;
try {
System.out.println("尝试连接服务器......");
socket = new Socket("127.0.0.1",8000);
System.out.println("服务器连接成功!!!");
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
String strMassage = null;
Scanner scanner = new Scanner(System.in);
boolean flag = true;
while(flag) {
System.out.println("发送消息:");
strMassage = scanner.next();
((DataOutputStream) out).writeUTF(strMassage); //向服务器发送消息
out.flush();
strMassage = ((DataInputStream) in).readUTF();//读取服务器消息
if(!strMassage.equals("bye")) {
System.out.println("接收消息:"+strMassage);
}else {
((DataOutputStream) out).writeUTF("bye"); //给人家也发送bye,让它退出
flag = false;
}
}
in.close();
out.close();
socket.close();
System.out.println("客户端退出!");
}catch (Exception e) {
e.printStackTrace();
}
}
}
多对一的TCP程序
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;
/**
* @ClassName ServerThread
* @Description 多线程服务器端
* @Author lzq
* @Date 2018/12/12 10:38
* @Version 1.0
**/
public class ServerThread implements Runnable{
private Socket socket; //定义Socket属性
public ServerThread(Socket socket) {
this.socket = socket;
}
public void run() {
DataInputStream in = null;
DataOutputStream out = null;
try {
System.out.println("客户端连接上......\n客户端来自"+socket.getInetAddress().getHostAddress());
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
String strMassage = null;
Scanner scanner = new Scanner(System.in);
boolean flag = true;
while(flag) {
strMassage = in.readUTF();
if(!strMassage.equals("bye")) {
System.out.println("客户端消息:\n"+strMassage);
System.out.println("回复客户端:");
strMassage = scanner.next();
out.writeUTF(strMassage);
out.flush();
}else {
out.writeUTF("bye");
flag = false;
}
}
in.close();
out.close();
socket.close();
System.out.println("服务器退出!");
}catch (Exception e) {
e.printStackTrace();
}
}
}
import java.net.ServerSocket;
import java.net.Socket;
/**
* @ClassName ServerDemo
* @Description 这个类来使用ServerThread类
* @Author lzq
* @Date 2018/12/12 10:48
* @Version 1.0
**/
public class ServerDemo {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(8000);
System.out.println("等待客户端连接......");
while(true) {
socket = serverSocket.accept();
new Thread(new ServerThread(socket)).start(); //实例化并启动线程
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
客户端代码不变,就是上面一对一通信是使用的客户端代码
端口扫描程序
import java.net.Socket;
import java.util.Scanner;
/**
* @ClassName NetTest1
* @Description 扫描端口范围
* @Author lzq
* @Date 2018/12/12 11:13
* @Version 1.0
**/
public class NetTest1 {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
System.out.println("输入IP地址:");
String ip = scanner.next();
System.out.println("输入其实端口号:");
int start = scanner.nextInt();
System.out.println("输入终止端口号:");
int end = scanner.nextInt();
Socket socket = null;
int port = start;
System.out.println("扫描中......");
while(port <= end) {
try {
socket = new Socket(ip,port);
System.out.println("活动端口:"+port);
}catch (Exception e) {
System.out.println(port+"端口关闭");
}
if(socket != null) {
socket.close();
}
port++;
}
System.out.println("扫描结束!");
}
}
import java.net.ServerSocket;
import java.net.Socket;
/**
* @ClassName TestDemo7
* @Description 扫描测试类
* @Author lzq
* @Date 2018/12/12 11:22
* @Version 1.0
**/
public class TestDemo7 {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(50);
socket = serverSocket.accept();
socket.close();
serverSocket.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
输入IP地址:
127.0.0.1
输入其实端口号:
48
输入终止端口号:
52
扫描中......
48端口关闭
49端口关闭
活动端口:50
51端口关闭
52端口关闭
扫描结束!