简易Unity 前后端交互

Socket(套接字)用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。网络中的主机一般会运行多个服务器,每个服务器上的每一种服务都会打开一个Socket并绑定到一个端口,不同端口对应着不同的服务。IP对应着网络上的计算机,而端口则对应着计算机上某个具体的进程或服务。就好比邮寄信件时,地址代表一个具体的居民房,人名对应着具体的居住其中的一个人,邮递员根据地址和人名,就能把信件准确地寄出去。
根据连接启动的方式及本地套接字要连接的目标,套接字之间的连接可以分为服务器监听、客户端请求、连接确认三个步骤。

1、服务器监听
服务器端套接字只需要在程序启动之后处于等待连接的状态,并实时监控网络状态,等待其他客户端套接字的连接。
2、客户端请求
客户端套接字需要先创建一个套接字,并在套接字中描述服务器套接字的信息(IP地址和端口号),然后在向服务器套接字提出连接请求。
3、连接确认
当服务器端套接字监听或收到客户端套接字的连接请求时,就会响应客户端套接字的请求,建立一个新的线程,把服务器套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,接受其他客户端套接字的连接请求。
以下代码是JAVA后台和Unity C#前台的简单TCP通信
TCP服务端-JAVA

package com.servlet;

import java.io.IOEXception;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;

public class TestSocket{
    public static void main(String[] args)
    {
        run();
    }
    public static void run()
    {
        //Socket 制定端口号为0-65535,不能与其他进程端口号冲突,否则启动时程序会报端口占用的错误
        int serbPort=4700;
        //创建服务端Socket
        ServerSocket serverSocket=null;
        int recvMsgSize=0;
        //接收字节缓冲数组
        byte[] receivBuf=new byte[8792];
        try{
            serverSocket=new ServerSocket(servPort);
            //处理完一个客户端请求之后再次进入等待状态
            while(true)
            {
                //至此,程序将一直等待客户端连接,直到有客户端接入代码才能继续执行
                System.out.println("服务端已启动,绑定端口"+servPort);
                Socket clientSocket=serverSocket.accept();
                SocketAddress clientAddress=clientSocket.getRemoteSocketAddress();
                System.out.println("收到客户端连接,ip"+clientAddress);
                InputStream in=clientSocket.getInputStream();
                OutputStream out=clientSocket.getOutputStream();
                //接收客户端发来的数据,并原样返回客户端
                while((recvMsgSize=in.read(receivBuf))!=-1){
                    String receivedData=new String(receivBuf.toString());
                    System.out.println(receivedData);
                    out.write(receivBuf,0,recvMsgSize);
                }
                //释放Socket资源
                clientSocket.close();
            }
        }catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}

TCP Unity C#客户端

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

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

public class MySocket : MonoBehaviour{

    void Start(){
        string host="localhost";//此处是ip地址
        int port =4700;
        string sendMsg="send data form client";
        byte[] buffer=Encoding.Unicode.GetBytes(sendMsg);//把string 数据转码为byte型数据
    }

    public static void Connet(string sever,int servPort,byte[] data){
        TcpClient client=null;
        try{
            client=new TcpClient(sever,servPort);
            Debug.Log("连接服务器并发送数据");
            NetworkStream streamToServer=client.GetStream();//获得客户端的流
            streamToServer.Write(data,0,data.Lenth);//将转换号的二进制数据流写入流中并发送
            //接收数据
            //目前收到的总字节长度
            int totalBytesRcvd=;
            //最后一次读取的字节长度
            int bytesRcvd;
            //将服务器返回消息读到data字节数组中
            while(totalBytesRcvd<data.Length)
            {
                bytesRcvd=streamToServer.Read(data,totalBytesRcvd,data.Length-totalBytesRcvd);
                if(bytesRcvd==-1)
                {
                    throw new SocketException();
                }
                totalBytesRcvd+=bytesRcvd;              
            }
            string str=Encoding.Unicode.GetString(data,0,data.Length);
            Debug.Log("接收的数据:"+str);
        }
        catch(Exception ex)
        {
            Debug.Log("客户端异常!");
        }
        finally{
            try{
                if(client!=null)
                {
                    client.Close();
                }
            }
            catch(Exceptionm ex)
            {
                Debug.Log("服务器没有关掉");
            }
        }
    }
}

以上是Java服务端和Unity客户端的简易通信

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是关于Unity和Java前后端交互的文档内容示例: 1. 引 - 介绍文档的目和范围,说明Unity和Java前后端交互的重要性和意义。 2.术选择 - 解释为什么选择使用Java作为后端语言,并说明Unity与Java交互的方式和原理。 3. 后端搭建 - 详细描述如何搭建Java后端环境,包括安装Java开发工具、配置开发环境、启动服务等。 4. 接口设计 - 定义前后端接口的数据格式和协议,如JSON、XML等。说明接口的参数、返回值和可能的错误码。 5. Unity集成 - 介绍如何在Unity中集成Java后端,包括添加相关依赖库、配置网络请求、处理数据传输等。 6. 数据交互 - 示范如何在Unity中向Java后端发送请求并获取响应。包括使用HTTP协议、WebSocket或其他通信方式。 7. 用户认证 - 解释如何在前后端交互中实现用户认证和授权功能,保证数据安全性。 8. 异常处理 - 讨论前后端交互中可能出现的异常情况,并提供相应的异常处理机制。 9. 性能优化 - 提供一些建议和技巧,以优化前后端交互的性能,包括网络请求的批量处理、数据压缩、缓存等。 10. 安全性 - 强调前后端交互中的安全性问题,如数据加密、防止XSS、CSRF等攻击。 11. 测试与调试 - 介绍如何进行前后端交互的测试和调试,包括单元测试、集成测试、接口调试等。 12. 部署与运维 - 提供部署和运维Unity和Java前后端交互的建议,包括服务器配置、日志管理、监控等。 13. 参考资料 - 列出用于设计和实施Unity和Java前后端交互的参考资料,如文档、教程、案例等。 这些内容是文档中常见的部分,具体的文档内容可能会根据项目需求和实际情况进行调整和扩展。在编写文档时,应该清晰、准确地描述Unity和Java前后端交互的步骤和技术细节,以便团队成员理解和实施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值