服务端
public class XJCS {
public short iPreviewWidth = 0;
public short iPreviewHeight = 0;
public short refreshRate = 50;// 刷新率 毫秒
public byte imageQuality = 60;// 图像质量
/**
 * 0后 1前 摄像头
 */
public byte cameraID = 0;}
public class SendHead
{
public int cmd=0;
public int size=0;
public int csA=0;
public int csB=0; @Override
public void onPreviewFrame(byte[] data, Camera camera) 
{
if(xjcs.refreshRate>0)
{
long l=System.currentTimeMillis();
if(l<execuTime+xjcs.refreshRate)
{
return;
}
execuTime=l;
}

 YuvImg=new YuvImage(data, ImageFormat.NV21,xjcs.iPreviewWidth ,xjcs.iPreviewHeight, null); 
 
 byteArrOut.reset();
try {
YuvImg.compressToJpeg(img_rect, xjcs.imageQuality, byteArrOut);
} catch (Exception e) {
FF.scErr("img.compressToJpeg");
e.printStackTrace();
return;

                               
comByte=byteArrOut.toByteArray();
sh5.size=comByte.length;// SendHead //----------将图标添加发送列队
ssoc.SQ.add(sh5,comByte, sh5.size);
ssoc.SQ.exec();

//--------------------------
comByte=null;

}发送列队 public class XC_SendQueue extends Thread 
{

Object sync=new Object();

LinkedList<struct_SendData> queue=new LinkedList<struct_SendData>();
XC_SendQueue()
{

}

 private boolean __break=false;
 private boolean __Tstopped=false;
private  struct_SendData ssd;
 
public void add(byte[] byte_, int size) {
ssd = new struct_SendData();
ssd.data = byte_;
ssd.size = size;
queue.addFirst(ssd);
}
 

public void add(SendHead sh,byte[] byte_, int size) {
 ssd = new struct_SendData();
ssd.data = toNetMsg?sh.toNetMsg():sh.toBytes();
ssd.size = SendHead.HEADSIZE;
queue.addFirst(ssd);

 ssd = new struct_SendData();
ssd.data = byte_;
ssd.size = size;
queue.addFirst(ssd);
}


 
public void add(struct_SendData ssd_)
{
queue.addFirst(ssd_);
}

public boolean isAlive2()
{
return __Tstopped;
}

public void interrupt2()
{
__break=true;
exec();
}

public void exec()
{
synchronized (sync) 
{
sync.notify();
}
}


@Override
public void run() 
{
struct_SendData sj;
while(true)
{

synchronized (sync_send) 
{

while(!queue.isEmpty())
{
sj=queue.removeLast();
try {
outStream.write(sj.data,0,sj.size);
} catch (IOException e) {
e.printStackTrace();
FF.scErr("IOException:45124");
if(!setSocketError(SocketError.ERROR_IOEXCEPTION,"XC_SendQueue:IOException:123"))return;;

}
}
}


synchronized (sync) 
{
try {
sync.wait();
} catch (InterruptedException e) {
e.printStackTrace();
FF.scErr("sync.wait();");
if(!setSocketError(SocketError.ERROR_IOEXCEPTION,"XC_SendQueue:synchronized (sync) :547"))return;;
}
}

if(__break)break;
}
__Tstopped=true;

}
}
客户端

连接到服务端
boolean  connectServer(String ip)
{
if(csoc.socket!=null){if(csoc.isIOException==false)return true;}
//ff.toast("开始连接...");
// Socket soc=csoc.connectToServer("192.168.43.1",1234);

if(ip!=null && ip.equals(""))ip=new String("192.168.43.1");
if(ip==null)ip=new String("192.168.43.1");
//ff.xxk(ip);
Socket soc=csoc.connectToServer(ip,1234);

  
if(soc==null)
{
ff.xxk("连接失败");
ll_control.setVisibility(View.VISIBLE);
return false;
}

csoc.toNetMsg=false;
csoc.initSocket(soc);
csoc.setOnRecvSendHead(this);
csoc.setOnSocketError(this);
csoc.startRecv(recvBuffer);
ff.setTitle("已连接 ");
return true;


}
@Override
public boolean onSocketReceivedData(SendHead sh, byte[] data,MySocket ___sssss) 
{
switch (sh.cmd) {  
case command.ML_FILE_Picture:
{
 Gbmp=BitmapFactory.decodeByteArray(data, 0, sh.size);
 chan.sendEmptyMessage(chan.msgImgPreviewShowBitmap);
}break; return true;
}