안녕하세요
C#으로 비동기소캣서버 만들고 있어요.. indata라는 곳에 mcu에서 1초마다 데이터를 받아오고 이걸 서버로 전송하는거 만들려고 합니다..
SerialPort sp = (SerialPort)sender;
indata = sp.ReadExisting();
오롷게 받고 있구요
클라이언트 코드
IPAddress ipaddress = IPAddress.Parse(textBox3.Text);//텍스트박스의 값을 읽어서 ip로 사용
IPEndPoint endPoint = new IPEndPoint(ipaddress, int.Parse(textBox4.Text));//연결할 아이피와 포트 설정
//소캣 생성
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//연결
socket.Connect(endPoint);
//데이터 전송
sendThread = new Thread(new ThreadStart(Send));
sendThread.IsBackground = true;
receiveThread.Start();
//
//Recive 스레드 처리(서버<->클라이언트)
receiveThread = new Thread(new ThreadStart(Receive));
receiveThread.IsBackground = true;
receiveThread.Start();
}
private void Send()
{
while (true)
{
byte[] sendBuffer = Encoding.UTF8.GetBytes(indata.Trim());
socket.Send(sendBuffer);
}
}
private void Receive()
{
while (true)
{
byte[] sendBuffer = Encoding.UTF8.GetBytes(indata.Trim());
socket.Send(sendBuffer);
//연결된 서버가 보낸 데이터 수신
byte[] recevieBuffer = new byte[512];
int length = socket.Receive(recevieBuffer, recevieBuffer.Length, SocketFlags.None);
string msg = Encoding.UTF8.GetString(recevieBuffer, 0, length);
}
이렇게 송수신 할 수 있는걸 만들었어요
서버측은
private void Receive()
{
while (true)
{
//연결된 클라이언트가 보낸 데이터 수신
byte[] receiveBuffer = new byte[512];
int length = clientSocket.Receive(
receiveBuffer, receiveBuffer.Length, SocketFlags.None);
//디코딩
string msg = Encoding.UTF8.GetString(receiveBuffer);
이렇게 리시버를 만들고 쓰레드를 돌립니다.
클라이언트에는 데이터가 1.2.3.4씩 제대로 들어오는데 서버에는 1 하나만 뜨고 이상 안받아집니다..
혹시 어떻게 해야하나요?
함수동작을 이해안하고 코드 긁어와서 써서 그런거에요 처음부터 다시 하세요
패킷 보낼 때 맨뒤에 \0이나 \n 넣어서 보내면 됨,