Java编程实现多线程TCP服务器完整实例
程序员文章站
2023-12-19 14:39:58
相关java类
socket
public class socket extends object
·功能:tcp客户端套接字
·构造方法:
soc...
相关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服务器完整实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!