SocketClient

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class SocketClient {
    public Socket socket = null;
    public OutputStream outputStream = null;
    public OutputStreamWriter outputStreamWriter = null;
    public BufferedWriter bufferWrite = null;
    public InputStream inputStream = null;
    public SocketState socketState = SocketState.Closed;
    public Thread socketThread = null;
    public List<String> protocolList = new ArrayList();
    private static boolean closeSocket = false;

    public void closeSocket() {
        closeSocket = true;
        socketThread = null;
    }

    public void connectSocket() {
        startThread();
    }

    public void sendProtocolAPI(String protocol) {
        protocolList.add(protocol);
    }

  
    private void startThread() {
        if (socketThread == null) {
            socketThread = new Thread() {
                public void Recivce(String protocol) {
                    //Protocol.ParseProtocol(protocol);
                }
                public void run() {
                    byte[] buffer = new byte['?'];
                    while (true) {
                        try {
                            if (closeSocket) {
                                closeSocket = false;
                                try {
                                    if (socket != null) {
                                        socket.close();
                                    }
                                } catch (IOException localIOException1) {
                                }
                                socket = null;
                                outputStream = null;
                                outputStreamWriter = null;
                                inputStream = null;
                                System.gc();
                                socketState = SocketState.Closed;
                                break;
                            }
                            if (SocketState.Connected != socketState) {
                                socketState = SocketState.Connecting;
                                socket = new Socket();
                                InetSocketAddress ipa = new InetSocketAddress(Config.IP, Config.Port);
                                socket.connect(ipa, 500);
                                outputStream = socket.getOutputStream();
                                outputStreamWriter = new OutputStreamWriter(outputStream);
                                bufferWrite = new BufferedWriter(outputStreamWriter);
                                inputStream = socket.getInputStream();
                                socket.setTcpNoDelay(true);
                                socket.setKeepAlive(true);
                                socketState = SocketState.Connected;
                                Thread.sleep(1000L);
                            }
                            if (SocketState.Connected == socketState) {
                                if (protocolList.size() > 10) {
                                    protocolList.removeAll(protocolList);
                                } else if (protocolList.size() > 0) {
                                    while (protocolList.size() > 0) {
                                        bufferWrite.write(protocolList.get(0));
                                        bufferWrite.flush();
                                        protocolList.remove(0);
                                        Config.PaySDKAPI.ReceiveTcpLinkAPI(Config.IP, Config.Port);
                                    }
                                }
                            }
                        } catch (Exception e) {
                            socketState = SocketState.Closed;
                            try {
                                Thread.sleep(5000L);
                            } catch (InterruptedException localInterruptedException) {
                            }
                        }
                        try {
                            if ((inputStream != null) && (SocketState.Connected == socketState)) {
                                int readSize = inputStream.read(buffer);
                                if (readSize > 0) {
                                    Recivce(new String(buffer, 0, readSize));
                                }
                            }
                        } catch (IOException e) {
                            socketState = SocketState.Closed;
                        }
                    }
                }
            };
            socketThread.start();
        }
    }
}

 

转载于:https://www.cnblogs.com/zclaude/p/11590089.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java程序设计实验报告 实验一 实验题目:从键盘上读入10个字符串存入数组a中,然后输出这10个字符串中最大字符串 和最小字符串。 实验代码: public class StrPro { public static void main(String[] args) { String str[] = new String[5]; System.out.println("Please input 10 strings:"); int i; String max,min; for(i=0;i<5;i++){ System.out.print("Please input the "+(i+1)+" string:"); Scanner sc = new Scanner(System.in); str[i] = sc.nextLine(); } max = str[0]; min = str[0]; for(i=0;i<str.length;i++){ if(max.compareTo(str[i])<0){ max = str[i]; } if(min.compareTo(str[i])>0){ min = str[i]; } } System.out.println("最大的字符串为:"+max); System.out.println("最小的字符串为:"+min); } } 实验结果: 实验心得体会: 掌握了java的基本语法,数组的定义与使用,做这个实验要了解字符串数组的定义 及字符串数组的输入方法,还有比较字符串数组的大小的调用方法等。 实验二 实验题目: 自定义一个矩形类(Rectangle),包含的属性有:长(length),宽(width), 包含的方法有:关于属性的setter和getter方法,即setLength,getLength,setWidth ,getWidth,计算矩形面积的方法(getArea)。 定义矩形类的子类正方形类(Square),包含的属性和方法自行确定,要求完成的 功能是,能计算正方形的面积。 定义一个测试类(Test),测试矩形类和正方形类能否正确的计算面积。 以上类中属性和方法的访问权限自行确定,方法和构造方法若有参数,也自行确定 。 实验代码: public class Rectangle { int Length; int Width; public int getLength() { return Length; } public void setLength(int length) { Length = length; } public int getWidth() { return Width; } public void setWidth(int width) { Width = width; } int getArea(){ return Length * Width; } } public class Square extends Rectangle{ Square(int border) { super.setLength(border); super.setWidth(border); } } public class Test { public void test(){ System.out.println("请选择计算的形状的序号:1.矩形 2.正方形"); Scanner sc = new Scanner(System.in); int i = sc.nextInt(); int len,wid; if(i==1){ System.out.print("请输入矩形的长:"); Scanner s = new Scanner(System.in); len = s.nextInt(); System.out.print("请输入矩形的宽:"); wid = s.nextInt(); Rectangle re = new Rectangle(); re.setLength(len); re.setWidth(wid); System.out.println("矩形面积为:"+re.getArea()); } else if(i==2){ System.out.print("请输入正方形的边长:"); Scanner s = new Scanner(System.in); len = s.nextInt(); Square sq = new Square(len); System.out.println("正方形面积为:"+sq.getArea()); } else{ System.out.println("输入错误!"); } } public static v

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值