Socket C# unity书写简单客户端与服务器的交互

本文详细介绍了Socket通信的基本原理,包括服务器端和客户端的实现步骤。从创建Socket对象到使用TCP协议进行数据交换,再到如何处理连接请求,最后到通信结束后的资源释放。同时,提供了具体的代码示例,帮助读者更好地理解Socket通信的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

保存记忆    

Socket 的三次招手四次挥手


服务端:
1:创建一个socket的对象,Socket socketserver=new Socket
(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
第一个参数是指定socket对象使用的寻址方案,即IPV4或IPV6;
第二个参数socket对象的套接字的类型,此处stream是表示流式套接字
第三个参数socket对象支持的协议,TCP协议或UDP协议。
这三个参数一般初期使用上面的就OK了,到了后期对socket通信熟悉了再来看其它参数的功能及作用。
2:使用指定的端口号和服务器的ip地址初始化System.Net.IPEndPoint类的实例
IPEndPoint endpoint=new IPEndPoint(ipaddress, port);
3:用socket对像socketserver的Bind()方法绑定IPEndPoint;
socketserver.Bind(endpoint);
4:用socket对像socketserver的Listen()方法开始监听;
socketwatch.Listen(20);//此处是让服务器可以监听20个客户端的连接。
5:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;
SocketsocConnection = socketwatch.Accept();//socConnection 就是服务器监听到的客户端连接的套接字,服务器就可以通过socConnection 和该连接的客户端进行通信。
6;此处就可以使用socConnection 进行通信Receive()和Send();
7:通信结束后一定记得关闭socket,close()方法;

客户端:
1:创建一个socket的对象socketclient(和服务器一样)
2:使用指定的端口号和服务器的ip地址初始化System.Net.IPEndPoint类的实例(和服务器一样)
3:用socket对像socketclient的Connect()方法以上面建立的IPEndPoint对像做为参数,向服务器发出连接请求;
其中Connect的参数就是第二步IPEndPoint的实例
4:连接成功后,就可以进行通信(Receive()和Send())
5:通信结束后一定记得关闭socket,close()方法;

 

 

 

贴代码   客户端

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using System.Net;
using System.Net.Sockets;
using System;
using System.Text;
using System.Threading;

public class SocketKHD : MonoBehaviour {
    byte[] result = new byte[1024];
    IPAddress ip;
    Socket socketserver;
    void Start()
    {
        ip = IPAddress.Parse("192.168.1.136");
        socketserver = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);
        try
        {
            socketserver.Connect(new IPEndPoint(ip, 8899));
            print("连接成功");
        }
        catch
        {
            print("连接失败");
            return;
        }
        lianjie();
    }
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            string str = "我是客户端";
            socketserver.Send(Encoding.UTF8.GetBytes(str));
        }
    }
    void lianjie()
    {
        int num = socketserver.Receive(result);
        print(Encoding.UTF8.GetString(result, 0, num));
        
    }
}
 

 

服务器端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace cccc_ConsoleServer_1
{
    class Program
    {
        static Socket socketserver;
        static byte[] result = new byte[1024];
        static void Main(string[] args)
        {
            IPAddress ip = IPAddress.Parse("192.168.1.136");
            socketserver = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
            socketserver.Bind(new IPEndPoint(ip, 8899));
            socketserver.Listen(10);
            while (true)
            {
                Socket clientsocket = socketserver.Accept();
                clientsocket.Send(Encoding.UTF8.GetBytes("我是服务器"));
                while (true)
                {
                    try
                    {
                        int num = clientsocket.Receive(result);
                        Console.WriteLine(Encoding.UTF8.GetString(result, 0, num));
                    }
                    catch(Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        socketserver.Close();
                    }
                }
            }
        }

    }
}
 

服务器端没有处理强制断开连接   使用需谨慎   有时间再去续写 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值