unity用socket实现手机作为客户端,电脑作为服务端的消息传递

_JoyC 2020-05-10 09:37:50
我想用手机当客户端向电脑传递消息,但是好像手机连不上电脑(两个项目同时在电脑测试的时候可以正常传递)。如果手机当服务端,电脑当客户端的时候就可以正常通信。
服务端和客户端的代码都是写在unity的脚本里的。
为什么会出现这种问题,是电脑没开什么权限吗,还是ip地址的问题啊?
愁到头秃了...求大佬解答!急!在线等!
...全文
46181 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxq0228 2022-09-21
  • 打赏
  • 举报
回复

我也遇到了和你同样的问题

_JoyC 2020-12-07
  • 打赏
  • 举报
回复
理论上可以。手机和PC端也可以蓝牙连接?
Lexie971102 2020-11-19
  • 打赏
  • 举报
回复
你好,我想做一个Android app,在手机端进行拍照,然后传给pc端进行深度学习计算,之后再传回手机端,请问手机与pc之间的通信应该用什么来做啊?用这个socket可以吗
_JoyC 2020-05-23
  • 打赏
  • 举报
回复
但服务端单独写个控制台应用可以通信,放在unity里就不行。没找到原因
_JoyC 2020-05-23
  • 打赏
  • 举报
回复
找到原因了!原来是WiFi自带了AP隔离,默认设置还不能关...巨坑 可以电脑和手机互相ping一下看是否在同一局域网
没事写写笔记 2020-05-21
  • 打赏
  • 举报
回复
手机和电脑连的同一个WiFi 在电脑端,WIN+R cmd下输入IPConfig 找到 IPv4 地址 确保在一个局域网中 检查端口是否占用
带酒书生 2020-05-12
  • 打赏
  • 举报
回复
电脑可以手机不行我碰到过一次,你把代码里所有的debug删掉再打包。
  • 打赏
  • 举报
回复
首先,他们要在同一个局域网
_JoyC 2020-05-11
  • 打赏
  • 举报
回复
引用 3 楼 舌尖上的中国001 的回复:
这中一般debug一下就知道了。感觉你的描述不是在同一局域网,也有可能是防火墙的问题
这是client部分的代码 using UnityEngine; using System.Collections; using System.Net.NetworkInformation; using System.Net; using System.Net.Sockets; using System.IO; using Net; namespace Net { public class SocketClient : MonoBehaviour { //public GameObject test; //public string myIP; private static byte[] result = new byte[1024]; private static byte[] result_2 = new byte[1024]; public static string realResult = null; private static Socket clientSocket; //是否已连接的标识 public bool IsConnected = false; public SocketClient() { clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } /// <summary> /// 连接指定IP和端口的服务器 /// </summary> /// <param name="ip"></param> /// <param name="port"></param> public void ConnectServer(string ip, int port) { IPAddress mIp = IPAddress.Parse(ip); IPEndPoint ip_end_point = new IPEndPoint(mIp, port); try { clientSocket.Connect(ip_end_point); IsConnected = true; Debug.Log("连接服务器成功"); } catch { IsConnected = false; Debug.Log("连接服务器失败"); return; } try { //服务器下发数据长度 int receiveLength = clientSocket.Receive(result); ByteBuffer buffer = new ByteBuffer(result); int len = buffer.ReadShort(); string data = buffer.ReadString(); Debug.Log("服务器返回数据:" + data); } catch { } } /// <summary> /// 发送数据给服务器 /// </summary> public void SendMessages(string data) { if (IsConnected == false) return; try { ByteBuffer buffer = new ByteBuffer(); buffer.WriteString(data); clientSocket.Send(WriteMessage(buffer.ToBytes())); } catch { IsConnected = false; clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); } } /// <summary> /// 数据转换,网络发送需要两部分数据,一是数据长度,二是主体数据 /// </summary> /// <param name="message"></param> /// <returns></returns> private static byte[] WriteMessage(byte[] message) { MemoryStream ms = null; using (ms = new MemoryStream()) { ms.Position = 0; BinaryWriter writer = new BinaryWriter(ms); ushort msglen = (ushort)message.Length; writer.Write(msglen); writer.Write(message); writer.Flush(); return ms.ToArray(); } } //连接关闭 public void SocketQuit() { //先关闭客户端 if (clientSocket != null) { IsConnected = false; clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); Debug.Log("尝试关闭客户端"); } } } } using UnityEngine; using System.Collections; using Net; using System.Net.Sockets; using System.Net.NetworkInformation; using UnityEngine.UI; using UnityEngine.Android; using System.Linq; public class SocketClientTest : MonoBehaviour { string myIP; int myPort; SocketClient mSocket = new SocketClient(); public Text myText; public InputField inputIP;//获取输入的IP public GameObject startPanel;//开始界面 //static int i = 0; //public GameObject player;//记录player的位置并发送 //string x, y, z; // Use this for initialization void Start() { myText.text = "Now Start"; myPort = 1998; }); } // Update is called once per frame void Update() { //x = player.transform.position.x.ToString(); //y = player.transform.position.y.ToString(); //z = player.transform.position.z.ToString(); //mSocket.ConnectServer(myIP, 1989); //mSocket.SendMessages("x" + x + "y" + y + "z" + z); } public void OnPressBtn() { Destroy(startPanel); myIP = inputIP.text; mSocket.ConnectServer(myIP, myPort); myText.text = "IP=" + myIP + ",port=" + myPort.ToString(); mSocket.SendMessages("成功了!"); } public void PressToQuit() { mSocket.SendMessages("close"); mSocket.SocketQuit(); } } 移动端点击之后就会卡在这个界面,(如果连接失败的话这个panel也是可以消失的)电脑调试就可以正常运行,端口也是开放的...请问这个问题出在哪呀
  • 打赏
  • 举报
回复
这中一般debug一下就知道了。感觉你的描述不是在同一局域网,也有可能是防火墙的问题
_JoyC 2020-05-11
  • 打赏
  • 举报
回复
引用 1 楼 舌尖上的中国001 的回复:
首先,他们要在同一个局域网
您好~ 手机和电脑连的同一个WiFi,ip地址是电脑端的,手动输入后通过input field获取,但手机会卡在连接这里

2,586

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧