服务端
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;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货