winform과 unity 사이의 Socket 통신

1. 유니티 서버, winform에서 온 Picht, Yaw, Roll 수신
///   
/// scoket   
///   
public class SocketServer : MonoBehaviour  
{
    public GameObject obj;
    private Thread thStartServer;//socket 시작 루틴 정의
    private string msg;
    public float Roll,Picht,Yaw;
    private String[] strArray=null; 
void Start()  
{
        thStartServer = new Thread(StartServer);
        thStartServer.Start();//이 스레드 시작
    }  
void Update()  
{
        obj.transform.eulerAngles = new Vector3(Picht, Yaw, Roll);
    }
    private void StartServer()  
{  
const int bufferSize = 8792;//캐시 크기, 8192바이트
IPAddress ip = IPAddress.Parse("127.0.0.1");  
TcpListener tlistener = new TcpListener(ip, 8888);  
tlistener.Start();  
Debug.Log("Socket 서버 모니터링 시작..."); 
TcpClient remoteClient = tlistener.AcceptTcpClient();//연결된 클라이언트 수신, 차단 방법
Debug.Log("클라이언트가 연결되었습니다! local:"+ remoteClient.Client.LocalEndPoint +"
NetworkStream streamToClient = remoteClient.GetStream();//클라이언트로부터 스트림 가져오기
do  
{  
try//클라이언트를 직접 끄면 서버에서 이상이 발생합니다.
{  
//클라이언트가 보낸 데이터 섹션 수신
byte[] buffer = new byte[bufferSize];//캐시 버퍼 그룹 정의
int byteRead = streamToClient.Read(buffer, 0, bufferSize);
if(byteRead==0)//연결이 끊어지거나 TCPClient에서 Close() 메서드를 호출하거나 흐름에서 Dispose() 메서드를 호출합니다. 
{  
Debug.Log("클라이언트 연결 끊기...");
break;  
}  
   msg = Encoding.ASCII.GetString(buffer, 0, byteRead);//전송된 데이터 흐름을 문자열로 변환
                strArray = msg.Split(',');
               //Roll = float.Parse(msg);
                for (int i = 0; i < strArray.Length; i++)
                {
                    Roll = float.Parse( strArray[0]);
                    Picht = float.Parse(strArray[1]);
                    Yaw = float.Parse(strArray[2]);
                }
                Debug.Log(msg);//전송된 문자열 보이기
               //tt.GetComponent().text = msg;
            }  
catch(Exception ex)  
{  
Debug.Log("클라이언트 예외:"+ ex. Message); 
break;  
}  
}  
while (true);
    }
void OnApplicationQuit() {thStartServer.Abort();//프로그램이 끝날 때 스레드를 죽입니다}
2. winform 사이드 코드
public partial class Form1 : Form     {
        const int portNo = 8888;         private TcpClient _client;         byte[] data;
}
    private void Form1_Load(object sender, EventArgse) {//기본 IP 및 포트 번호 설정this._client = new TcpClient();this._client.Connect("127.0.1", portNo);data = new byte[this._client.ReceiveBufferSize];
      }
public void SendMessage(string message)//전송 데이터 {try {Network Stream ns=this._client.GetStream();byte[] 데이터 = System.Text.Encoding.ASCII.GetBytes(message);//전송할 데이터를 바이트 흐름으로 변환하여 전송합니다.;                 ns.Flush();             }             catch (Exception ex)             {                //MessageBox.Show(ex.ToString());             }         }

좋은 웹페이지 즐겨찾기