winform과 unity 사이의 Socket 통신
3107 단어 c#데이터 프로토콜 분석가상 모방
///
/// 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()); } }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.