socket客户端与服务端代码(解决16进制输入流转换字符串操作)

MainActivity.java

public class MainActivity extends AppCompatActivity
{
    private SocketClient client;
    private SocketServer server=new SocketServer ( 6666 );
    private String password;
    private TextView txt;
    private EditText edit;
    private Button btn;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_main );
        txt=(TextView)findViewById ( R.id.textView );
        edit=(EditText)findViewById ( R.id.edit );
        btn=(Button)findViewById ( R.id.btn );
        //服务端代码
        btn.setOnClickListener ( new View.OnClickListener ( )
        {
            @Override
            public void onClick(View v)
            {

                Log.i ( "hh","08");
                server.beginListen ();
                Log.i ( "hh","09");
                btn.setVisibility ( View.GONE );
            }
        } );

        //客户端代码
//        server.beginListen ();
//        client=new SocketClient ();
//        client.clintValue ( MainActivity.this,"172.18.74.64" ,6668);
//        client.openClientThread ();
//
//        btn.setOnClickListener ( new View.OnClickListener ( )
//        {
//            @Override
//            public void onClick(View v)
//            {
//                password=edit.getText ().toString ();
//                client.sendMsg ( password );
//
//            }
//        } );
//       SocketClient.mHandler=new Handler (  ){
//           @Override
//           public void handleMessage(Message msg)
//           {
//               txt.setText ( msg.obj.toString ());
//               Log.i ( "msg",msg.obj.toString ());
//           }
//       };


    }

}
客户端代码 SocketClient.java

有多种转换方法

public class SocketClient
{
    private Socket client;
    private Context context;
    private int port;
    private String site;
    private Thread thread;
    public static Handler mHandler;
    private boolean isClient=false;
    private PrintWriter out;
    private InputStream in;
    private String str;;


    public void openClientThread(){
        thread=new Thread ( new Runnable ( )
        {
            @Override
            public void run()
            {

                try {
                    client=new Socket ( site,port );//建立连接
//                    client.setSoTimeout ( 5000 );//设置超时时间
                    if (client!=null)
                    {
                        Log.i ( "socket","1" );
                        isClient=true;
                        forOut();
                        Log.i ( "socket","2" );
                        forIn ();
                    }else {
                        isClient=false;
                        Toast.makeText ( context,"网络连接失败",Toast.LENGTH_LONG ).show ();
                    }
                    Log.i ( "hahah","site="+site+" ,port="+port );
                }catch (UnknownHostException e) {
                    e.printStackTrace ();
                    Log.i ( "socket","6" );
                }catch (IOException e) {
                    e.printStackTrace ();
                    Log.i ( "socket","7" );
                }

            }
        } );
        thread.start ();
    }

    public void clintValue(Context context,String site,int port)
    {
        this.context=context;
        this.site=site;
        this.port=port;
    }
    public void forOut()
    {
        try {
            out=new PrintWriter ( client.getOutputStream () );
        }catch (IOException e){
            e.printStackTrace ();
            Log.i ( "socket","8" );
        }
    }
    public void forIn(){

        Log.i ( "hhhhh",isClient+"" );

        while (isClient) {

            try {
                in=client.getInputStream ();
                Log.e ( "aaa",in.toString () );
                byte[] bt = new byte[50];
                str=new String ( bt,"GBK" );
                in.read ( bt );
                Log.d ( "soket1",str );

        } catch (IOException e) {
        }

            if (str!=null) {
                Message msg = new Message ( );
                msg.obj =str ;
                mHandler.sendMessage ( msg );
            }

        }
    }
    public void sendMsg(final String str)
    {
        new Thread ( new Runnable ( )
        {
            @Override
            public void run()
            {
                if (client!=null)
                {
                    out.print ( str );
                    out.flush ();
                    Log.i ( "outtt",out+"" );
                }else
                {
                    isClient=false;
                    Toast.makeText ( context,"网络连接失败",Toast.LENGTH_LONG ).show ();
                }
            }
        } ).start ();

    }
    public String bytes2hex03(byte[] bytes)
    {
        final String HEX = "0123456789abcdef";
        StringBuilder sb = new StringBuilder(bytes.length * 2);
        for (byte b : bytes)
        {

            sb.append(HEX.charAt((b >> 4) & 0x0f));

            sb.append(HEX.charAt(b & 0x0f));
        }

        return sb.toString();
    }

    /**
     * @fuction 输入流转化为字符串
     * @param tInputStream
     * @return String
     */
    public static String getStreamString(InputStream tInputStream) {
        try {
            if (tInputStream.available()!=0) {
                Log.e ( "Socket2"," " );
                try {
                    BufferedReader tBufferedReader = new BufferedReader(new InputStreamReader (tInputStream));
                    StringBuffer tStringBuffer = new StringBuffer();
                    String sTempOneLine = new String("");
                    while ((sTempOneLine = tBufferedReader.readLine()) != null) {
                        tStringBuffer.append(sTempOneLine);
                    }
                    Log.e ( "Socket3"," "+tStringBuffer.toString() );
                    return tStringBuffer.toString();

                } catch (Exception ex) {
                    ex.printStackTrace();

                    Log.e ( "Socket3"," "+ex.toString ( ) );
                }
            }
        } catch (IOException e) {
            e.printStackTrace ( );
            Log.e ( "Socket4"," "+e.toString ( ) );
        }
        return null;
    }


    private static byte charToByte(char c)
    {
        return (byte) "0123456789ABCDEF".indexOf(c);
    }

    public void closeSocket()
    {
        try {
            client.close ();
        }catch (IOException e){
            e.printStackTrace ();
        }
    }
}
服务端代码 SocketSever.java

public class SocketServer
{
    private ServerSocket server;
    private Socket socket;
    private InputStream in;
    private String str=null;
    private boolean isClint=false;

    public SocketServer(int port){
        try {
            server= new ServerSocket ( port );
            isClint=true;
        }catch (IOException e){
            e.printStackTrace ();
        }
        
       
    }
    public void beginListen()
    {
        new Thread ( new Runnable ( )
        {
            @Override
            public void run()
            {
                while (true)
                {

                                try {
                                    socket=server.accept ();



                                    try {
                                        in =socket.getInputStream();
                                        PrintWriter out = new PrintWriter(socket.getOutputStream());
                                        while (!socket.isClosed())
                                        {
                                            byte[] bt=new byte[50];
                                            in.read ( bt );
                                            str=new String ( bt,"GBK" );
                                            out.println("Hello!world!! " + str);
                                            out.flush ();
                                            if (str==null||str=="exit")
                                                break;
                                            System.out.println(str);
                                        }
                                        socket.isClosed ();
                                    } catch (IOException e) {
                                        e.printStackTrace ( );
                                    }
                                } catch (IOException e) {
                                    e.printStackTrace ( );
                                }
                            }


                }
        } ).start ();
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值