티스토리 뷰
<이거 실패 ..>
udp 통신과정에서 중간에 멈춰서
값 한번 밖에 안 들어옴 ..
touchdesigner 에서 udp 통신 (소켓)을 통해 unity에 값을 보내보자.
using UnityEngine;
using System.Collections;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
public class client3 : MonoBehaviour
{
public string recvStr;
public string UDPClientIP = "192.168.0.81";
string str = " 01 ";
Socket socket;
EndPoint serverEnd;
IPEndPoint ipEnd;
byte[] recvData = new byte[1024];
byte[] sendData = new byte[1024];
int recvLen = 0;
Thread connectThread;
void Start()
{
UDPClientIP = "192.168.0.81";
UDPClientIP = UDPClientIP.Trim();
InitSocket();
}
void InitSocket()
{
print(UDPClientIP);
//ip연결 포트연결
//ipEnd = new IPEndPoint(IPAddress.Parse(UDPClientIP), 7400);
ipEnd = new IPEndPoint(IPAddress.Parse(UDPClientIP), 7400);
//소켓 udp
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//전송
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
serverEnd = (EndPoint)sender;
print("send");
SocketSend(str);
print(str+"end");
//받기 : 쓰레드
connectThread = new Thread(new ThreadStart(SocketReceive));
connectThread.Start();
}
void SocketSend(string sendStr)
{
// 스트링 보낸다
sendData = new byte[1024];
//
sendData = Encoding.UTF8.GetBytes(sendStr);
//
socket.SendTo(sendData, sendData.Length, SocketFlags.None, ipEnd);
}
//
void SocketReceive()
{
//받는다
while (true)
{
print('-');
recvData = new byte[1024];
try
{
recvLen = socket.ReceiveFrom(recvData, ref serverEnd);
print(recvLen);
}
catch (Exception e)
{
//error
print(e);
}
//receive print#####
print(" what##### : " + serverEnd.ToString());
if (recvLen > 0)
{
recvStr = Encoding.UTF8.GetString(recvData, 0, recvLen);
}
print(recvStr);
}
}
//
void SocketQuit()
{
//
if (connectThread != null)
{
connectThread.Interrupt();
connectThread.Abort();
}
// socket
if (socket != null)
socket.Close();
}
void OnApplicationQuit()
{
SocketQuit();
}
void Update()
{
}
}
unity 가 client야
client와 sever의 차이
client는 값을 달라고 요청해 !
그래서 코드를 보면 send와 receive가 있는데
값을 보낼때 send를 쓰고 receive는 쓰레드를 사용해서 항상 값이 있으면 받게 해놨어.
server는 값을 계속 보내고있어. 그니까 데이터를 갖고있는 애야.
여기에 값을 달라고 하면 서버가 보내줄수있어.
나는 터디에서 값을 5초마다 보내게 해놨고, 유니티에서 값이 전송되면 프린트해주라고 해놨어.
빈 오브젝트에 스크립트를 넣으면돼 !
여기서 중요한점은
IP주소와 port번호야
IP주소 때문에 고생을 좀 했음..
명령 프롬트에서
ipconfig해서
81저걸로 해야 값이 들어오더라고
1로했더니 안됐음 무슨차이인지 사실 모르겠어
암튼 터디에서는
udp out이랑 udp in을 만들었음.
out은 타이머를 통해서 5초마다 내보낼거라 timer1_callbacks에 연결했어
# me - this DAT
# timerOp - the connected Timer CHOP
# cycle - the cycle index
# interrupt - True if the user initiated a premature
# False if a result of a normal timeout
# fraction - the time in 0-1 fractional form
#
# segment - an object describing the segment:
#
# can be automatically cast to its index: e.g.: segment+3, segment==2, etc
#
# members of segment object:
# index numeric order of the segment, from 0
# owner Timer CHOP it belongs to
#
# lengthSeconds, lengthSamples, lengthFrames
# delaySeconds, delaySamples, delayFrames
# beginSeconds, beginSamples, beginFrames
# speed
# cycle, cycleLimit, maxCycles
# cycleEndAlertSeconds, cycleEndAlertSamples, cycleEndAlertFrames
#
# row - one validly named member per column:
# column headings used to override parameters:
# length, delay, speed, cyclelimit, maxcycles, cycleendalert
# special column headings:
# begin (time at which to start, independent of delays/lengths, overrides delay)
#
# custom - dictionary of all columns that don't map to a built-in feature
#
# onInitialize(): if return value > 0, it will be
# called again after the returned number of frames.
# callCount increments with each attempt, starting at 1
a= op('text1')
def onInitialize(timerOp, callCount):
return 0
def onReady(timerOp):
return
def onStart(timerOp):
return
def onTimerPulse(timerOp, segment):
return
def whileTimerActive(timerOp, segment, cycle, fraction):
return
def onSegmentEnter(timerOp, segment, interrupt):
return
def onSegmentExit(timerOp, segment, interrupt):
return
def onCycleStart(timerOp, segment, cycle):
return
def onCycleEndAlert(timerOp, segment, cycle, alertSegment, alertDone, interrupt):
return
def onCycle(timerOp, segment, cycle):
return
def onDone(timerOp, segment, interrupt):
#여기가 중요 !!! a=text send라는 함수를 사용해서 a를 보냄 (타이머가 done될때마다)
op('udpout1').send(a)
print(a)
return
def onSubrangeStart(timerOp):
return
udpout을 살펴보면
로컬어드레스에 ip주소를 써주고 포트도 메뉴얼로 지정해줬더니 값 제대로 들어왔어 !!!!! 아래부분이 중요한듯 ..
값 들어오는것도 확인하려고 udpin도 만들었음
여기도 아래쪽에 local address에 ip주소 잘 적어주는게 중요 ...
# me - this DAT
#
# dat - the DAT that received the data
# rowIndex - is the row number the data was placed into
# message - an ascii representation of the data
# Unprintable characters and unicode characters will
# not be preserved. Use the 'bytes' parameter to get
# the raw bytes that were sent.
# bytes - a byte array of the data received
# peer - a Peer object describing the originating message
# peer.close() #close the connection
# peer.owner #the operator to whom the peer belongs
# peer.address #network address associated with the peer
# peer.port #network port associated with the peer
#
def onReceive(dat, rowIndex, message, bytes, peer):
print('000')
return
값 들어오는거 확인하려고 000만 찍어놨어
콘솔창 보고싶으면
여기서 보면됨 !!!!!
유니티에서 값 들어오는거는
이렇게 프린트 됩니다 !
끗
오류
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=doksajokyo&logNo=220830400811
참고
'Unity' 카테고리의 다른 글
Unity_ TD_ osc 통신_VFXgraph:scrip (0) | 2022.11.14 |
---|---|
unity_ 타임라인 영상 기록 추출 (0) | 2022.11.11 |
Unity 2020: 시네머신 ///// Timeline (0) | 2022.10.19 |
unity _ visual studio 연결 (0) | 2022.10.18 |
하나의 가상공간에서 VR플레이어 카메라와 3인칭 카메라 동시 출력하기 (0) | 2022.03.24 |
- Total
- Today
- Yesterday
- CNC
- sequelize
- JacobianMatrices
- opencv
- AI
- 유니티플러그인
- 후디니
- colab
- unity 360
- three.js
- DeepLeaning
- Python
- 유니티
- houdini
- Express
- Java
- emotive eeg
- oculuspro
- ardity
- 라즈베리파이
- Arduino
- VR
- StableDiffusion
- Unity
- docker
- node.js
- MQTT
- TouchDesigner
- motor controll
- RNN
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |