`
lance2002
  • 浏览: 7099 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA 通过TCP协议进行网络通信

 
阅读更多
 


 
 
1、简单的例子,server端只负责接收数据,client端只负责发送数据。
 
package com.test.tcpsimple;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TCPSimpleServerTest {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            System.out.println("服务端启动成功,建立监听客户端消息。。。");
            ServerSocket server = null;
            try {
                // 创建一个ServerSocket在端口8888监听客户请求
                server = new ServerSocket(8888);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                Socket socket = null;
                while (true) {
                    try {
                        // 由Socket对象得到输入流,并构造相应的BufferedReader对象
                        // 使用accept()阻塞等待客户请求,有客户
                        // 请求到来则产生一个Socket对象,并继续执行
                        socket = server.accept();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    System.out.println( sdf.format(new Date()) + " 接收到客户端消息:" + br.readLine());
                   
                    socket.close(); // 关闭Socket
                    br.close(); // 关闭Socket输入流
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                server.close(); // 关闭ServerSocket
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
 
 
package com.test.tcpsimple;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TCPSimpleClientTest {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            System.out.println("客户端启动成功!");
            System.out.print("请输入需要发送给服务端的消息:");
            // 由系统标准输入设备构造BufferedReader对象
            BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
            // 从系统标准输入读入一字符串
            String readline = brIn.readLine();
            // 若从标准输入读入的字符串为 "bye"则停止循环
            while (!readline.equals("bye")) {
               
                // 向本机的8888端口发出客户请求
                Socket socket = new Socket("127.0.0.1", 8888);
                PrintWriter pw = new PrintWriter(socket.getOutputStream());
                // 将从系统标准输入读入的字符串输出到Server
                pw.println(readline);
                // 刷新输出流,使Server马上收到该字符串
                pw.flush();
                // 在系统标准输出上打印读入的字符串
                System.out.println(sdf.format(new Date()) + " 向服务端发送消息:" + readline);
                System.out.println();
                System.out.print("请输入需要发送给服务端的消息:");
                pw.close();
                // 关闭Socket输出流
                socket.close();
                // 从系统标准输入读入一字符串
                readline = brIn.readLine();
            } // 继续循环
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
2、扩展的例子,server端监听数据,监听到后,可以给clinet端进行回复,client端发送数据,但是也可以接收都server端的回复
 
package com.test.tcp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TCPServerTest {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            System.out.println("服务端启动成功,建立监听客户端消息。。。");
            ServerSocket server = null;
            try {
                // 创建一个ServerSocket在端口8888监听客户请求
                server = new ServerSocket(8888);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                Socket socket = null;
                while (true) {
                    try {
                        // 由Socket对象得到输入流,并构造相应的BufferedReader对象
                        // 使用accept()阻塞等待客户请求,有客户
                        // 请求到来则产生一个Socket对象,并继续执行
                        socket = server.accept();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    System.out.println( sdf.format(new Date()) + " 接收到客户端消息:" + br.readLine());
                    System.out.print("请输入返回给客户端的响应信息:");
                    String line;
                   
                    // 由Socket对象得到输出流,并构造PrintWriter对象
                    PrintWriter pw = new PrintWriter(socket.getOutputStream());
                   
                    // 由系统标准输入设备构造BufferedReader对象
                    BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
                   
                    // 在标准输出上打印从客户端读入的字符串
                    // 从标准输入读入一字符串
                    line = brIn.readLine();
                   
                    // 如果该字符串为 "bye",则停止循环
                    if(line.equals("bye"));
                   
                    // 向客户端输出该字符串
                    pw.println(line);
                   
                    // 刷新输出流,使Client马上收到该字符串
                    pw.flush();
                   
                    // 在系统标准输出上打印读入的字符串
                    System.out.println( sdf.format(new Date()) + " 向客户端发送响应:" + line);
                    System.out.println("");
                   
                    socket.close(); // 关闭Socket
                    pw.close(); // 关闭Socket输出流
                    br.close(); // 关闭Socket输入流
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                server.close(); // 关闭ServerSocket
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
package com.test.tcp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TCPClientTest {
    public static void main(String[] args) {
       
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       
        try {
            // 向本机的8888端口发出客户请求
            System.out.println("客户端启动成功!");
            System.out.print("请输入需要发送给服务端的消息:");
            // 由系统标准输入设备构造BufferedReader对象
            BufferedReader brIn = new BufferedReader(new InputStreamReader(System.in));
            // 从系统标准输入读入一字符串
            String readline = brIn.readLine();
            // 若从标准输入读入的字符串为 "bye"则停止循环
            while (!readline.equals("bye")) {
                Socket socket = new Socket("127.0.0.1", 8888);
                PrintWriter pw = new PrintWriter(socket.getOutputStream());
                // 将从系统标准输入读入的字符串输出到Server
                pw.println(readline);
                // 刷新输出流,使Server马上收到该字符串
                pw.flush();
                // 在系统标准输出上打印读入的字符串
                System.out.println(sdf.format(new Date()) + " 向服务端发送消息:" + readline);
                BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                System.out.println(sdf.format(new Date()) + " 接收到服务端反馈消息:" + is.readLine());
                System.out.println();
                System.out.print("请输入需要发送给服务端的消息:");
                is.close();
                pw.close();
                // 关闭Socket输出流
                socket.close();
                // 从系统标准输入读入一字符串
                readline = brIn.readLine();
            } // 继续循环
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

  • 大小: 26.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics