unity socket编程
来源:互联网 发布:h618b改端口 编辑:程序博客网 时间:2024/05/01 08:23
一、第一步开始连接
1、创建socket
private Socket socket;
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2、创建ip和端口号
IPAddress address = IPAddress.Parse (“192.168.1.1”);
IPEndPoint endpoint = new IPEndPoint (address , port);
IPEndPoint endpoint = new IPEndPoint (address , port);
3、开始连接
socket.BeginConnect (endpoint , asyncResult => { //异步接收连接消息
try {
socket.EndConnect (asyncResult); //begin和end是对应,如果没有异常表示连接成功
} catch(SocketException ex) { //无法连接目标主机10060 主动拒绝10061 读写时主机断开10053
Close ();
Debug.LogError ("==connectException=>" + ex.NativeErrorCode);
return;
}
} , socket);
try {
socket.EndConnect (asyncResult); //begin和end是对应,如果没有异常表示连接成功
} catch(SocketException ex) { //无法连接目标主机10060 主动拒绝10061 读写时主机断开10053
Close ();
Debug.LogError ("==connectException=>" + ex.NativeErrorCode);
return;
}
} , socket);
二、发送消息
1、使用BeginSend和EndSend方法。
其中data是字节数组,第二参数是从data数据第几个位置发送,第三个参数是发送data的长度,最后一个是发送完异步接收数据
socket.BeginSend(data, 0, data.Length, SocketFlags.None, asyncResult => {
try {
int length = socket.EndSend(asyncResult); //会返回实际发送了多少数据
if(normalBackSate) {
backStateMessage (XSocket.Type.SEND , XSocket.State.SUCESS);
}
} catch (SocketException ex) {
Close();
backStateMessage (XSocket.Type.SEND , XSocket.State.EXCEPTION);
Debug.LogError("==send==>" + ex.NativeErrorCode);
}
}, socket);
try {
int length = socket.EndSend(asyncResult); //会返回实际发送了多少数据
if(normalBackSate) {
backStateMessage (XSocket.Type.SEND , XSocket.State.SUCESS);
}
} catch (SocketException ex) {
Close();
backStateMessage (XSocket.Type.SEND , XSocket.State.EXCEPTION);
Debug.LogError("==send==>" + ex.NativeErrorCode);
}
}, socket);
三、接收消息
1、发送前可以检测下,连接是否还存在
if (socket.Connected){}
2、使用BeginReceive和EndReceive方法。此方法需要在接收完以后回调自己实现不间断接收。
//第一个参数,是接收字节数组的对象,第二个是data开始位置,第三个是接收长度,最后一个是接收完异步接收数据
socket.BeginReceive(data , offset, size , SocketFlags.None, asyncResult => {
try {
int length = socket.EndReceive(asyncResult); //这里重点说明下,比如由于网络原因我们这里设定是接收100个字节数组,有可能只接收到90个字节数据,这是网络其它字节流还未到位的原因,
if(length < size) {
//执行继续接收,照上面假设我们需要把data继续传过去,开始位置就应该是90了,size长度就应该是10了。
return;
}
} catch (SocketException ex) {
Close();
Debug.LogError("==rev==>" + ex.NativeErrorCode);
return;
}
try {
int length = socket.EndReceive(asyncResult); //这里重点说明下,比如由于网络原因我们这里设定是接收100个字节数组,有可能只接收到90个字节数据,这是网络其它字节流还未到位的原因,
if(length < size) {
//执行继续接收,照上面假设我们需要把data继续传过去,开始位置就应该是90了,size长度就应该是10了。
return;
}
} catch (SocketException ex) {
Close();
Debug.LogError("==rev==>" + ex.NativeErrorCode);
return;
}
四、关闭socket
1、 if (socket.Connected) {
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
还有疑问加q群 115136489 点击打开链接
0 0
- Unity Socket 交互编程
- unity socket编程
- unity socket编程过程
- Unity 之Socket编程
- Unity Socket网络编程(TCP)
- unity简单的聊天socket编程
- Unity Socket
- unity学习Socket(一)
- unity学习Socket(一)
- Unity Socket TCP
- Unity Socket UDP
- Unity IPv6 Socket 支持
- Unity ipv6 Socket
- Unity Socket之NetMgr
- Unity之Socket[0]
- Unity之Socket[1]
- Unity Socket TCP
- Unity Socket UDP
- macOS Sierra特性,“任何来源”的选项没有了如何恢复
- 常用特殊符号的HTML代码(HTML字符实体)
- hadoop fs -text xxxx/part-00005.gz | more
- angularjs简单笔记
- maven打包自动忽略空文件夹
- unity socket编程
- js检验台湾身份证是否合法
- Android官方开发文档Training系列课程中文版:Activity测试之测试环境配置
- sensor time 传感器时间戳
- 习题4-2 正方形 UVa201
- rw_程序是怎样跑起来的 7-12章
- POJ 2823 Sliding Window 单调队列
- git 基本操作命令
- 根据MVP项目设计模式模拟的登录功能