博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初学Socket
阅读量:5292 次
发布时间:2019-06-14

本文共 2449 字,大约阅读时间需要 8 分钟。

服务器部分代码

using System.Collections;

using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System;
public class NetManager : MonoBehaviour
{
    private byte[] buffer = new byte[1024];      // 服务器设置最大接受客户端信息字段长度
    void Start()
    {
        //开启服务器方法
        StartServer();
    }
    /// <summary>
    /// 开启服务器
    /// 一:实例化一个socket对象   
    /// 二:创建一个终端
    /// 三:建立绑定
    /// 四:进行监听
    /// </summary>
    private void StartServer()
    {
        // 1:地址Ipv4     传输类型(流式)    Tcp协议   
        Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        // 2:终端  Ip+Port(端口)
        IPEndPoint endPoiont = new IPEndPoint(IPAddress.Any, 8888);
        // 3:绑定
        server.Bind(endPoiont);
        // 4:开启监听    10代表同一时间可以处理多少个客户端数据   并非最大连接量
        server.Listen(10);
        Debug.Log("server ok");
        // 异步开启接收客户端
        server.BeginAccept(AsyncAccept, server);
    }
    /// <summary>
    /// 异步接收客户端
    /// </summary>
    /// <param name="content"></param>
    void AsyncAccept(IAsyncResult content)
    {
        Socket server = content.AsyncState as Socket;         //得到服务器
        Socket client = server.EndAccept(content);            //服务器结束对当前客户端监听
        
        //再次开启异步   用于接收多个客户端
        server.BeginAccept(AsyncAccept, server);
        
        //接受客户端消息
        /*异步接收数据 参数解析    
         *  1 接收的容器  
         *  2 从该容器某位置接受   
         *  3 接受最大长度    
         *  4 null     
         *  5 接收到之后接收到的回调   
         *  6 对象(一般传自己)  
        */
        client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, AsyncReceive, client); // 接受客户端数据,并计算真正长度
    }
    /// <summary>
    /// 异步接收客户端消息
    /// </summary>
    /// <param name="result"></param>
    void AsyncReceive(IAsyncResult result)
    {
        Socket client = result.AsyncState as Socket;
        int len = client.EndReceive(result);                   // 异步接收数据结束结算真正数据长度
        //再次开启异步监听消息
        client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, AsyncReceive, client); // 接受客户端数据,并计算真正长度
        //消息解析
        byte[] res = new byte[len];                            // 新建数组接受真正数据  去除冗余数据
        System.Buffer.BlockCopy(buffer, 0, res, 0, len);       // 数组间赋值
        string msg = System.Text.Encoding.UTF8.GetString(res); // 将数据重新转化为字符
        Debug.Log(msg);
    }
}

 

 

//客户端部分代码

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace SocketClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             
            //客户端连接服务器
            client.Connect(IPAddress.Parse("127.0.0.1"), 8888);
            while (true)
            {
                //阻塞数据  客户端输入消息
                string msg = Console.ReadLine();

      //将消息转化为数据格式

                byte[] buffer = System.Text.Encoding.UTF8.GetBytes(msg);
                //发送数据
                client.Send(buffer);
            }
        }
    }
}

转载于:https://www.cnblogs.com/AEBOKE/p/9883076.html

你可能感兴趣的文章
关于阿西莫夫
查看>>
深深自责
查看>>
Nessus安装出现localhost:8834无法访问
查看>>
Android Eclipse JNI 调用 .so文件加载【转】
查看>>
如何添加 actions
查看>>
jQuery移除或禁用html元素点击事件常用方法小结
查看>>
volatile关键字
查看>>
20180524模拟赛T3——Word
查看>>
计算机网络基础
查看>>
关于书签(BookMark)操作;
查看>>
查看Linux服务器的硬盘使用情况
查看>>
日报 18/06/20
查看>>
loj #6136. 「2017 山东三轮集训 Day4」Left
查看>>
java集合类
查看>>
学习资料
查看>>
java 18 - 8 HashMap和ArrayList的嵌套2
查看>>
Day21 Json & pickle 数据序列化
查看>>
内存结构。
查看>>
洛谷 [FJOI2014]最短路径树问题 解题报告
查看>>
欲望都市游戏设计 背景图层和UI图层的设计
查看>>