欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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服务器完整实例

图片比较小,速度很快!

总结

以上就是本文关于java编程实现多线程tcp服务器完整实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

上一篇:

下一篇: