相关Java类
Socket
public class Socket extends Object
·功能:TCP客户端套接字 ·构造方法: Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号 ·常用方法: 1.getInetAddress 获得InetAddress的相关信息 2.getInputStream 获得此TCP连接的输入流 3.getOutPutStream 获得此TCP连接的输出流
ServerSocket
public class ServerSocket extends Object
·功能: TCP服务端套接字 ·构造方法: ServerSocket(int port) 创建绑定到特定端口的服务器套接字。 ·常用方法: 1.accept 获得TCP连接的客户端的socket 2.isClosed 获得ServerSocket的关闭状态
TCP服务器端
TcpServer.java
服务器端采用多线程的方式,每建立一个连接就启动一个java线程,发送图片给客户端,之后关闭此TCP连接
package cn.xidian.tcpSocket; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class TcpServer extends Thread{ Socket clientSocket; public TcpServer(Socket clientSocket) { super(); this.clientSocket = clientSocket; } @Override public void run() { try { //获得客户端的ip地址和主机名 String clientAddress = clientSocket.getInetAddress().getHostAddress(); String clientHostName = clientSocket.getInetAddress().getHostName(); System.out.println(clientHostName + "(" + clientAddress + ")" + " 连接成功!"); System.out.println("Now, 传输图片数据..........."); long startTime = System.currentTimeMillis(); //获取客户端的OutputStream OutputStream out = clientSocket.getOutputStream(); //传出图片数据 FileInputStream in = new FileInputStream(new File("/home/gavinzhou/test.jpg")); byte[] data = new byte[4096]; int length = 0; while((length = in.read(data)) != -1){ out.write(data, 0, length); //写出数据 } long endTime = System.currentTimeMillis(); //提示信息 System.out.println(clientHostName + "(" + clientAddress + ")" + " 图片传输成功," + "用时:" + ((endTime-startTime)) + "ms"); //关闭资源 in.close(); clientSocket.close(); System.out.println("连接关闭!"); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws IOException { //建立TCP连接服务,绑定端口 ServerSocket tcpServer = new ServerSocket(9090); //接受连接,传图片给连接的客户端,每个TCP连接都是一个java线程 while(true){ Socket clientSocket = tcpServer.accept(); new TcpServer(clientSocket).start(); } } }
TCP客户端
TcpClient
package cn.xidian.tcpSocket; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.Socket; public class TcpClient { public static void main(String[] args) throws IOException { // 建立TCP服务 // 连接本机的TCP服务器 Socket socket = new Socket(InetAddress.getLocalHost(), 9090); // 获得输入流 InputStream inputStream = socket.getInputStream(); // 写入数据 FileOutputStream out = new FileOutputStream(new File("../save.jpg")); byte[] data = new byte[4096]; int length = 0; while((length = inputStream.read(data)) != -1){ out.write(data, 0, length); } //关闭资源 out.close(); socket.close(); } }
结果
首先,命令行启动服务器端,之后启动客户端,结果如下:
图片比较小,速度很快!
总结
以上就是本文关于Java编程实现多线程TCP服务器完整实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
本文向大家介绍用Python实现一个简单的多线程TCP服务器的教程,包括了用Python实现一个简单的多线程TCP服务器的教程的使用技巧和注意事项,需要的朋友参考一下 最近看《python核心编程》,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程。 其实python在类的
问题内容: 我使用python的threding模块创建了一个简单的多线程tcp服务器。每次连接新客户端时,该服务器都会创建一个新线程。 然后,我打开了两个新的终端,并使用netcat连接到服务器。然后,当我使用连接的第一个终端输入并向服务器发送第一个数据时,来自服务器的答复将传到另一个终端,并且第一个连接断开。我猜到了原因,但我怀疑是否会发生这种情况,因为 clientsock 变量被覆盖,因此
本文向大家介绍C#实现多线程的Web代理服务器实例,包括了C#实现多线程的Web代理服务器实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现多线程的Web代理服务器。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍Java多线程实现聊天客户端和服务器,包括了Java多线程实现聊天客户端和服务器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java聊天室代码,供大家参考,具体内容如下 主要涉及知识 ·Java中GUI程序的编写,包括事件监听机制。 ·Java的网络通信编程,ServerSocket,Socket类的使用。 ·Java中多线程的编程,Thread类,Runnable
本文向大家介绍java实现多线程之定时器任务,包括了java实现多线程之定时器任务的使用技巧和注意事项,需要的朋友参考一下 在Java中Timer是java.util包中的一个工具类,提供了定时器的功能。我们可以创建一个Timer对象,然后调用其schedule方法在某个特定的时间去执行一个特定的任务。并且你可以让其以特定频率一直执行某个任务,这个任务是用TimerTask来描述的,我们只需要将要
本文向大家介绍java多线程编程实现下雪效果,包括了java多线程编程实现下雪效果的使用技巧和注意事项,需要的朋友参考一下 没有直接采用继承Thread类或者继承Runnable的接口来实现多线程,而是使用了匿名内部类。 要导入的类: 1.定义SowPanel类,继承JPanel类,这个类有两个整型数组成员,用来保存雪花起始位置。在构造函数中为数组赋初值;重写父类的paint()方法;定义一个启动