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);
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);

二、发送消息

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);

三、接收消息

1、发送前可以检测下,连接是否还存在
if (socket.Connected){} 
2、使用BeginReceiveEndReceive方法。此方法需要在接收完以后回调自己实现不间断接收。
//第一个参数,是接收字节数组的对象,第二个是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;
            }

四、关闭socket

1、 if (socket.Connected) {
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();
        }

还有疑问加q群 115136489 点击打开链接
0 0