java网络编程基于TCP的多客户端连接服务器
2016-09-02 15:05
721 查看
一、使用多线程实现多客户端连接服务端代码:
package com.test.net; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; class TCPThreadServerSocket implements Runnable { private Socket socket = null; private InputStream in = null; private OutputStream out = null; public TCPThreadServerSocket(Socket s) { this.socket = s; } @Override public void run() { try { //获取服务端输入的消息 in = socket.getInputStream(); //服务端返回的消息 out = socket.getOutputStream(); //用一个字节数字来存放消息,提高效率 byte[] recData = new byte[1024]; in.read(recData); String data = new String(recData); System.out.println("读取到客户端发送来的数据:" + data); //返回给客户端的消息 out.write("Hello client I am server".getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { try { //关闭资源 in.close(); out.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } public class TCPThreadServer { private static final int PORT = 6666; public static void main(String[] args) { int count = 1; try { /** * 创建一个ServerSocket对象,并给它制定一个端口号, * 通过这个端口号来监听客户端的连接,服务端接受客户端连接的请求是 * 不间断地接受的,所以服务端的编程一般都永无休止的运行 */ ServerSocket ss = new ServerSocket(PORT); System.out.println("服务器已经启动。。。"); while (true) { /** * 在服务端调用accept()方法接受客户端的连接对象,accept()方法是 * 一个阻塞式的方法,一直傻傻地等待着是否有客户端申请连接 */ Socket s = ss.accept(); System.out.println("第" + count + "个连接,IP地址是:" + s.getInetAddress()); count++; /** * 服务端使用多线程方便多客户端的连接 * 这里将服务端的socket传给内部类,方便每个客户端都创建一个线程 */ Thread t = new Thread(new TCPThreadServerSocket(s)); t.start(); } } catch (IOException e) { e.printStackTrace(); } } }
二、客户端A代码:
package com.test.net; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class TCPClientASocket { private static final int PORT = 6666; public static void main(String[] args) { Socket s = null; OutputStream out = null; InputStream in = null; DataOutputStream dos = null; DataInputStream dis = null; String serverHost = "127.0.0.1"; byte[] b = new byte[1024]; try { /** * 客户端通过IP和端口和服务器连接,连接上服务端后 * 就可以像服务端输出消息和接受服务端返回的消息 * 通过IP就能找到一台独一无二的电脑终端,通过PORT找到 * 终端的某一个独立的应用程序 */ s = new Socket(serverHost, PORT); out = s.getOutputStream(); dos = new DataOutputStream(out); dos.write("Hello Server I am client A".getBytes()); in = s.getInputStream(); dis = new DataInputStream(in); dis.read(b); String serverToClient = new String(b); System.out.println("服务端返回到客户端的信息:"+serverToClient); } catch (UnknownHostException e) { System.out.println("Host未知。。。"); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { //最后要关闭资源 out.close(); in.close(); dos.close(); dos.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } } } }
客户端B代码和A的基本一样
三、运行结果:
先启动服务端再运行客户端A代码和客户端B代码,运行结果如下:相关文章推荐
- Java 网络编程 中的 服务器与客户端的 连接!
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- java网络编程----------Socket实现客户端和服务器的连接
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- java 网络编程 多个客户端连接服务器
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
- 【Linux网络编程】基于TCP单进程版本阻塞式客户端/服务器
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- java:网络编程(一/基于Socket的单客户端连接)
- JAVA网络编程-TCP客户端与服务器端连接
- Java基础知识强化之网络编程笔记08:TCP之客户端键盘录入服务器控制台输出
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 【Linux网络编程】基于TCP多进程(fork)版本客户端/服务器
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现