您的位置:首页 > 编程语言

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

2016-09-22 12:16 489 查看
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 ();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: