当前位置:编程学习 > JAVA >>

TCP连接的两种简单的数据传输方式

TCP适合传输自定义原始的字节流,比如传输一个序列化为字节流后的对象或者结构体,发送方按约定的自定义报文结构发送,接收方按约定的自定义报文解码。一种传输字流节,适合传输结构体和对象,一种传输出字符串。
 
 
package com.magcomm.net;  
  
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStream;  
import java.io.PrintWriter;  
import java.io.Reader;  
import java.net.InetAddress;  
import java.net.InetSocketAddress;  
import java.net.Socket;  
import java.net.SocketAddress;  
import java.net.UnknownHostException;  
import java.nio.CharBuffer;  
  
import org.apache.http.util.EncodingUtils;  
  
import android.util.Log;  
  
public class SocketClient {  
    private static final String tags = "com.magcomm.nmc, SocketClient";  
    private Socket socket;     
    private final String SERVER_HOST_IP = "192.168.0.15";  
    private final String SERVER_HOST_NAME = "mail.magcomm.cn";  
    private final int SERVER_HOST_PORT = 58889;  
      
    private InputStream mInputStream;                   
    private OutputStream mOutputStream;   
    private PrintWriter mPrintWriter;   
    private BufferedReader reader;  
    public SocketClient()    
    {    
    
    }    
        
    public boolean connection()    
    {    
        boolean bRet = false;    
        try    
        {    
            //创建一个客户端连接    
            InetAddress ia = InetAddress.getByName(SERVER_HOST_NAME);   
            socket = new Socket(ia, SERVER_HOST_PORT);    
            //socket.connect(new InetSocketAddress(SERVER_HOST_NAME, SERVER_HOST_PORT),10000);  
              
            bRet = true;    
        } catch (Exception e)    
        {    
            // TODO: handle exception    
            Log.i(tags, "socket open error" + e.getMessage());  
        }    
                
        return bRet;    
    }    
        
    //发送消息    
    public boolean sendMsg(String msg) {  
        boolean bRet = false;  
        if (socket != null) {  
            if (socket.isConnected()) {  
                //获取这个客户端连接SOCKET的输入输出    
                try {  
                    mPrintWriter = new PrintWriter(socket.getOutputStream(), true);  
                    mPrintWriter.print(msg);  
                    mPrintWriter.flush();  
                    bRet = true;  
                } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    Log.i(tags, "write socket error");  
                    e.printStackTrace();  
                }  
                      
            }  
        }  
        return bRet;  
    }  
    public boolean sendMsg2(byte[] buffer, int offset, int count) {  
        boolean bRet = false;  
        if (socket != null) {  
            if (socket.isConnected()) {  
                //获取这个客户端连接SOCKET的输入输出    
                try {  
                    mOutputStream = socket.getOutputStream();  
                    mOutputStream.write(buffer, offset, count);  
                    mOutputStream.flush();  
                    Log.i("NMCDataUnPack", "socket send success--------");  
                    bRet = true;  
                } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    Log.i(tags, "write socket error");  
                    e.printStackTrace();  
                }  
                      
            }  
        }  
        return bRet;  
    }  
      
    //读取消息    
    public String readMsg()    
    {    
        String msgString = "";    
        try    
        {    
            mInputStream = socket.getInputStream();   
            byte buffer[] = new byte[1024];    
            int reCount = mInputStream.read(buffer);    
            msgString = EncodingUtils.getString(buffer, /*"GB2312"*/"US-ASCII");   
        }catch (Exception e)    
        {    
            Log.i(tags, "read socket error");  
            e.printStackTrace();  
        }   
        return msgString;    
    }    
    public String readMsg2()    
    {    
        String msgString = "";    
     
            try {  
                char[] buffer = new char[1024];    
                Reader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
                reader.read(buffer);  
                msgString = buffer.toString();   
            } catch (IOException e) {  
                Log.i(tags, "read socket error");  
                e.printStackTrace();  
            }  
         
        return msgString;    
    }      
        
    public void close()    
    {    
        try    
        {   mInputStream.close();  
            mPrintWriter.close();  
            mOutputStream.close();  
            socket.close();    
        } catch (Exception e)    
        {    
            // TODO: handle exception    
            Log.i(tags, "socket close error" + e.getMessage());  
        }    
    }    
}  

 

 
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,