java socket工具类

服务端

package server;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class Servertools {

	private	ServerSocket sersoc;
	public Socket clisoc[]=new Socket[20];
	
	private	DataOutputStream out;
	private	InputStream inFromClient;
	private DataInputStream in;
	
	/**
	 * 服务端类构造方法
	 * @param port
	 */
	Servertools(int port){
		try {
			sersoc=new ServerSocket(port);
			clisoc[0]=sersoc.accept();
			inFromClient = clisoc[0].getInputStream();
			in = new DataInputStream(inFromClient);			
		} catch (IOException e) {
			e.printStackTrace();
		}
		this.read();//开启读取线程		
	}
	
	/**
	 * socket服务端类发送消息方法
	 * @param mes
	 * @param clientsoc
	 */
	public void send(String mes,Socket clientsoc) {
		
		try {
			out = new DataOutputStream(clientsoc.getOutputStream());
			out.writeUTF(mes);	

		}catch(IOException e) {
			System.out.println("socket~server发送失败:"+e);		
		}				
	}
	
	
	/**
	 * socket服务端类读取消息方法
	 */
	public void read() {
		Readthread rt=new Readthread();
		rt.start();
	}
	
	
	/**
	 * socket服务端读取线程类
	 * @author Administrator
	 *
	 */
	public class Readthread extends Thread{

		public void run() {
			
			while(true)
			{
				try {
					String tempstr=in.readUTF();
					//System.out.println("socket~client收到消息:"+tempstr);	
					Server.readit(tempstr);//调用主类读取中断方法
				
				}catch(IOException e) {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException ee) {
						ee.printStackTrace();
					}
				}				
			}				
		}
	}
	
		
	/**
	 * socket服务端类关闭方法
	 */
	public void close() {
		try {
			out.close();
			clisoc[0].close();
		}catch(IOException e) {
			System.out.println("socket~server关闭失败:"+e);
		}		
	}
}

在使用类中实现 "Server.readit(tempstr);//调用主类读取中断方法" 静态方法即可获得传输过来的数据Server为类名

 

客户端

package client;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Clienttools {

	private Socket clisoc;
	private OutputStream outtoserver;
	private DataOutputStream out;
	
	private InputStream inFromServer;
	private DataInputStream in;
	
	/**
	 * socket客户端类构造方法
	 * @param ip
	 * @param port
	 */
	Clienttools(String ip,int port){
		try {
			//输出流区
			clisoc=new Socket(ip,port);
			outtoserver=clisoc.getOutputStream();
			out=new DataOutputStream(outtoserver);		
			//输入流区
			inFromServer = clisoc.getInputStream();
			in = new DataInputStream(inFromServer);			
		}catch(IOException e) {
			System.out.println("socket~client创建失败:"+e);		
		}
		this.read();
	}
	
	
	/**
	 * socket客户端类发送消息方法
	 * @param mes
	 */
	public void send(String mes) {
		try {
			out.writeUTF(mes);	
		}catch(IOException e) {
			System.out.println("socket~client发送失败:"+e);		
		}				
	}

	
	/**
	 * socket客户端类读取消息方法
	 */
	public void read() {
		Readthread rt=new Readthread();
		rt.start();
	}

	
	/**
	 * socket客户端读取线程类
	 * @author Administrator
	 *
	 */
	public class Readthread extends Thread{
		public void run() {	
			while(true)
			{
				try {
					String tempstr=in.readUTF();
					//System.out.println("socket~client收到消息:"+tempstr);	
					Client.readit(tempstr);//调用主类读取中断方法
				
				}catch(IOException e) {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException ee) {
						ee.printStackTrace();
					}
				}				
			}								
		}
	}
	
		
	/**
	 * socket客户端类关闭方法
	 */
	public void close() {
		try {
			out.close();
			outtoserver.close();
			clisoc.close();
		}catch(IOException e) {
			System.out.println("socket~client关闭失败:"+e);
		}			
	}
}

同样在实用类中实现静态方法"Client.readit(tempstr);//调用主类读取中断方法"  (Client为类名) 获得服务端传来的数据

需要不同类型的数据传输时,修改输出流的write方法即可.

声明:转载请注明出处,本人入门级菜鸟,内容大多学习于网络,存在问题太多不一一列举,大佬多多指教.本人QQ941131649

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值