Unity3d socket和java socket通信 by feng 侠Word文档格式.docx
- 文档编号:18333042
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:29
- 大小:24.09KB
Unity3d socket和java socket通信 by feng 侠Word文档格式.docx
《Unity3d socket和java socket通信 by feng 侠Word文档格式.docx》由会员分享,可在线阅读,更多相关《Unity3d socket和java socket通信 by feng 侠Word文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
{
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);
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)
publicstaticvoidSend(intdata)
publicstaticvoidSend(stringdata)
byte[]longth=Encoding.UTF8.GetBytes(data);
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);
publicstaticlongReceiveLong()
byte[]recvBytes=newbyte[8];
mSocket.Receive(recvBytes,8,0);
longdata=TypeConvert.getLong(recvBytes,true);
publicstaticstringReceiveString(intlength)
byte[]recvBytes=newbyte[length];
mSocket.Receive(recvBytes,length,0);
stringdata=Encoding.UTF8.GetString(recvBytes);
}
namespaceLSocket.cmd
publicclassCommandID
/**错误消息命令**/
publicstaticintERROR=1000;
/**登陆消息命令**/
publicstaticintLOGIN=1001;
/**退出消息命令**/
publicstaticintEXIT=1002;
/**获取pdb文件消息命令**/
publicstaticintGETPDB=1003;
publicstaticintGETPDB_AGAIN=1006;
/**其他用户进入消息命令**/
publicstaticintOTHER_USERS=1004;
publicstaticintACCEPT=1005;
publicCommandID()
namespaceLSocket.Type
usingUnityEngine;
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.Length;
i++)
{
buf[i]=(byte)(s&
returnbuf;
publicstaticbyte[]getBytes(ints,boolasc)
byte[]buf=newbyte[4];
if(asc)
for(inti=buf.Length-1;
{
buf[i]=(byte)(s&
0x000000ff);
s>
for(inti=0;
publicstaticbyte[]getBytes(longs,boolasc)
byte[]buf=newbyte[8];
0x00000000000000ff);
publicstaticshortgetShort(byte[]buf,boolasc){
if(buf==null){
//thrownewIllegalArgumentException("
bytearrayisnull!
if(buf.Length>
2){
bytearraysize>
2!
shortr=0;
i--){
r<
r|=(short)(buf[i]&
i++){
returnr;
publicstaticintgetInt(byte[]buf,boolasc){
//thrownewIllegalArgumentException("
4){
4!
intr=0;
r|=(buf[i]&
publicstaticlonggetLong(byte[]buf,boolasc){
8){
8!
longr=0;
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侠
publicclassByteSocketServer
//存放所有用户位置的map
privateHashMap<
String,User>
userMap;
privateByteArrayOutputStreambyteOutput;
privateDataOutputStreamoutput;
publicByteSocketServer()
userMap=newHashMap<
String,User>
();
/**
*@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("
policy-file-request/>
))
{
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()+"
//pw.flush();
}
else
newLoadPDB(socket,userMap).start();
catch(Exceptione)
服务器出现异常!
+e);
importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.InputStream;
import.HttpURLConnection;
import.MalformedURLException;
import.URL;
import.URLConnection;
importjava.util.Iterator;
importjava.io.DataInputStream;
importcom.pdb.AnalyzePDB;
importcom.unity.socket.type.ConvertType;
publicclassLoadPDBextendsThread
/**错误消息命令**/
publicstaticfinalintERROR=1000;
/**登陆消息命令**/
publicstaticfinalintLOGIN=1001;
/**退出消息命令**/
publicstaticfinalintEXIT=1002;
/**获取pdb文件消息命令**/
publicstaticfinalintGETFILE=1003;
/**其他用户进入消息命令**/
publicstaticfinalintOTHER_USERS=1004;
publicstaticfinalintACCEPT=1005;
privateSocketsocket;
userMap;
privateUseruser;
intcount=0;
privatebooleanfirst=true;
publicLoadPDB(Socketsocket,HashMap<
userMap)throwsIOException
this.socket=socket;
this.userMap=userMap;
publicvoidrun()
DataInputStreaminput=newDataInputStream(socket.getInputStream());
//这里就是解析协议的部分
//读出开头长度的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)
链接地址:https://www.bdocx.com/doc/18333042.html