Unity3d socket和java socket通信 by feng 侠.docx
- 文档编号:5351203
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:29
- 大小:24.09KB
Unity3d socket和java socket通信 by feng 侠.docx
《Unity3d socket和java socket通信 by feng 侠.docx》由会员分享,可在线阅读,更多相关《Unity3d socket和java socket通信 by feng 侠.docx(29页珍藏版)》请在冰豆网上搜索。
Unity3dsocket和javasocket通信byfeng侠
Unity3D客户端:
namespaceLSocket.Net
{
/**
*
*@authorfeng侠,qq:
313785443
*@date2010-12-23
*
*/
//描述:
封装c#socket数据传输协议
usingUnityEngine;
usingSystem;
usingSystem.Net.Sockets;
usingSystem.Net;
usingSystem.Collections;
usingSystem.Text;
usingLSocket.Type;
usingLSocket.cmd;
publicclassUnitySocket
{
publicstaticSocketmSocket=null;
publicUnitySocket()
{
}
publicstaticvoidSocketConnection(stringLocalIP,intLocalPort)
{
mSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
IPAddressip=IPAddress.Parse(LocalIP);
IPEndPointipe=newIPEndPoint(ip,LocalPort);
mSocket.Connect(ipe);
Send("
policy-file-request>");//thesecondconnect.ifit'snotequalspolicyhead,itwillcomeinthemainconnect!
Send(CommandID.LOGIN);
Send("feng");
strings=ReceiveString(100);//从服务器端接受返回信息
MonoBehaviour.print(s.Length);
MonoBehaviour.print(s);
}
catch(Exceptione)
{
//ErrLog.RecordErr(e,ModuleName,"AsySocket","");
}
}
publicstaticvoidSend(shortdata)
{
byte[]longth=TypeConvert.getBytes(data,false);
mSocket.Send(longth);
}
publicstaticvoidSend(longdata)
{
byte[]longth=TypeConvert.getBytes(data,false);
mSocket.Send(longth);
}
publicstaticvoidSend(intdata)
{
byte[]longth=TypeConvert.getBytes(data,false);
mSocket.Send(longth);
}
publicstaticvoidSend(stringdata)
{
byte[]longth=Encoding.UTF8.GetBytes(data);
mSocket.Send(longth);
}
publicstaticshortReceiveShort()
{
byte[]recvBytes=newbyte[2];
mSocket.Receive(recvBytes,2,0);//从服务器端接受返回信息
shortdata=TypeConvert.getShort(recvBytes,true);
returndata;
}
publicstaticintReceiveInt()
{
byte[]recvBytes=newbyte[4];
mSocket.Receive(recvBytes,4,0);//从服务器端接受返回信息
intdata=TypeConvert.getInt(recvBytes,true);
returndata;
}
publicstaticlongReceiveLong()
{
byte[]recvBytes=newbyte[8];
mSocket.Receive(recvBytes,8,0);//从服务器端接受返回信息
longdata=TypeConvert.getLong(recvBytes,true);
returndata;
}
publicstaticstringReceiveString(intlength)
{
byte[]recvBytes=newbyte[length];
mSocket.Receive(recvBytes,length,0);//从服务器端接受返回信息
stringdata=Encoding.UTF8.GetString(recvBytes);
returndata;
}
}
}
namespaceLSocket.cmd
{
publicclassCommandID
{
/**错误消息命令**/
publicstaticintERROR=1000;
/**登陆消息命令**/
publicstaticintLOGIN=1001;
/**退出消息命令**/
publicstaticintEXIT=1002;
/**获取pdb文件消息命令**/
publicstaticintGETPDB=1003;
publicstaticintGETPDB_AGAIN=1006;
/**其他用户进入消息命令**/
publicstaticintOTHER_USERS=1004;
publicstaticintACCEPT=1005;
publicCommandID()
{
}
}
}
namespaceLSocket.Type
{
usingUnityEngine;
usingSystem.Collections;
publicclassTypeConvert
{
publicTypeConvert()
{
}
publicstaticbyte[]getBytes(shorts,boolasc)
{
byte[]buf=newbyte[2];
if(asc)
{
for(inti=buf.Length-1;i>=0;i--)
{
buf[i]=(byte)(s&0x00ff);
s>>=8;
}
}
else
{
for(inti=0;i { buf[i]=(byte)(s&0x00ff); s>>=8; } } returnbuf; } publicstaticbyte[]getBytes(ints,boolasc) { byte[]buf=newbyte[4]; if(asc) for(inti=buf.Length-1;i>=0;i--) { buf[i]=(byte)(s&0x000000ff); s>>=8; } else for(inti=0;i { buf[i]=(byte)(s&0x000000ff); s>>=8; } returnbuf; } publicstaticbyte[]getBytes(longs,boolasc) { byte[]buf=newbyte[8]; if(asc) for(inti=buf.Length-1;i>=0;i--) { buf[i]=(byte)(s&0x00000000000000ff); s>>=8; } else for(inti=0;i { buf[i]=(byte)(s&0x00000000000000ff); s>>=8; } returnbuf; } publicstaticshortgetShort(byte[]buf,boolasc){ if(buf==null){ //thrownewIllegalArgumentException("bytearrayisnull! "); } if(buf.Length>2){ //thrownewIllegalArgumentException("bytearraysize>2! "); } shortr=0; if(asc) for(inti=buf.Length-1;i>=0;i--){ r<<=8; r|=(short)(buf[i]&0x00ff); } else for(inti=0;i r<<=8; r|=(short)(buf[i]&0x00ff); } returnr; } publicstaticintgetInt(byte[]buf,boolasc){ if(buf==null){ //thrownewIllegalArgumentException("bytearrayisnull! "); } if(buf.Length>4){ //thrownewIllegalArgumentException("bytearraysize>4! "); } intr=0; if(asc) for(inti=buf.Length-1;i>=0;i--){ r<<=8; r|=(buf[i]&0x000000ff); } else for(inti=0;i r<<=8; r|=(buf[i]&0x000000ff); } returnr; } publicstaticlonggetLong(byte[]buf,boolasc){ if(buf==null){ //thrownewIllegalArgumentException("bytearrayisnull! "); } if(buf.Length>8){ //thrownewIllegalArgumentException("bytearraysize>8! "); } longr=0; if(asc) for(inti=buf.Length-1;i>=0;i--){ r<<=8; r|=(buf[i]&0x00000000000000ff); } else for(inti=0;i r<<=8; r|=(buf[i]&0x00000000000000ff); } returnr; } } } Java服务器端: packagecom.unity.socket; importjava.io.BufferedReader; importjava.io.ByteArrayOutputStream; importjava.io.DataOutputStream; importjava.io.InputStreamReader; importjava.io.PrintWriter; import.ServerSocket; import.Socket; importjava.util.HashMap; /** * *@authorfeng侠 *@date2010-12-23 * */ publicclassByteSocketServer { //存放所有用户位置的map privateHashMap privateByteArrayOutputStreambyteOutput; privateDataOutputStreamoutput; publicByteSocketServer() { userMap=newHashMap } /** *@paramargs */ publicstaticvoidmain(String[]args) { newByteSocketServer().startServer(); } publicvoidstartServer() { try { ServerSocketserverSocket=newServerSocket(843); System.out.println("服务器开启"); //LoadPDBloadPDB=newLoadPDB(); while(true) { //新建一个连接 Socketsocket=serverSocket.accept(); System.out.println("有用户登陆进来了"); //启动一条新的线程 //newUserThreadHandler(socket,userMap).start(); //byte[]b=newbyte[22]; BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream())); //PrintWriterpw=newPrintWriter(socket.getOutputStream()); byteOutput=newByteArrayOutputStream(); output=newDataOutputStream(byteOutput); char[]by=newchar[22]; br.read(by,0,22); Stringhead=newString(by); //Stringscmd=newString(by); //System.out.println("命令号字符串: "+scmd+"ok"); if(head.equals(" { output.writeBytes(SecurityXML.GetXml()+"\0"); DataOutputStreamdataOutput=newDataOutputStream(socket.getOutputStream()); //编写数据的长度 //dataOutput.writeLong(bytes.length); System.out.print(head); dataOutput.write(byteOutput.toByteArray()); dataOutput.flush(); socket.close(); //pw.write(SecurityXML.GetXml()+"\0"); //pw.flush(); } else { newLoadPDB(socket,userMap).start(); } } } catch(Exceptione) { System.out.println("服务器出现异常! "+e); } } } packagecom.unity.socket; importjava.io.BufferedInputStream; importjava.io.BufferedOutputStream; importjava.io.BufferedReader; importjava.io.BufferedWriter; importjava.io.ByteArrayOutputStream; importjava.io.DataOutputStream; importjava.io.File; importjava.io.FileOutputStream; importjava.io.FileReader; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; import.HttpURLConnection; import.MalformedURLException; import.Socket; import.URL; import.URLConnection; importjava.util.Iterator; importjava.io.ByteArrayOutputStream; importjava.io.DataInputStream; importjava.io.DataOutputStream; import.Socket; importjava.util.HashMap; importjava.util.Iterator; importcom.pdb.AnalyzePDB; importcom.unity.socket.type.ConvertType; publicclassLoadPDBextendsThread { /**错误消息命令**/ publicstaticfinalintERROR=1000; /**登陆消息命令**/ publicstaticfinalintLOGIN=1001; /**退出消息命令**/ publicstaticfinalintEXIT=1002; /**获取pdb文件消息命令**/ publicstaticfinalintGETFILE=1003; /**其他用户进入消息命令**/ publicstaticfinalintOTHER_USERS=1004; publicstaticfinalintACCEPT=1005; privateSocketsocket; //存放所有用户位置的map privateHashMap privateUseruser; privateByteArrayOutputStreambyteOutput; privateDataOutputStreamoutput; intcount=0; privatebooleanfirst=true; publicLoadPDB(Socketsocket,HashMap { this.socket=socket; this.userMap=userMap; } publicvoidrun() { try { DataInputStreaminput=newDataInputStream(socket.getInputStream()); //这里就是解析协议的部分 while(true) { //读出开头长度的short(2个字节) intcmd=0; byte[]b=newbyte[4]; input.read(b); //Stringcmd=newString(b); cmd=ConvertType.getInt(b,true); System.out.println("命令号: "+cmd); //根据cmd的值不同,判断后续的内容是什么 switch(cmd) { caseLOGIN: //读取用户名 System.out.println("读取用户名: "); byte[]nameBytes=newbyte[4];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Unity3d socket和java socket通信 by feng socket java 通信
![提示](https://static.bdocx.com/images/bang_tan.gif)