저는이 작업에 익숙하지 않습니다. 단지 콘솔 서버 창에서 클라이언트로 메시지를 보내려고합니다.() 위의 내가 client.Send를 사용할 때byte []를 서버에서 클라이언트로 계속 전송 하시겠습니까?
static void Main(string[] args)
{
try
{
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8000);
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
newsock.Bind(localEndPoint);
newsock.Listen(10);
Socket client = newsock.Accept();
if (client.Connected)
{
Console.WriteLine("client connected.");
}
string msg = "Who's there?";
byte[] buffer = new byte[msg.Count()];
buffer = Encoding.ASCII.GetBytes(msg);
client.Send(buffer);
그것은 잘 작동하지만 내가 다른 쪽 끝에서 아무것도받지 아래에 다음과 같이 내가 할 때 때
여기 내 서버입니다. 클라이언트가 연결 되었기 때문에 실패한 이유는 없습니다.
while (client.Connected)
{
Console.WriteLine("enter msg: ");
string userMsg = Console.ReadLine();
byte[] userBuffer = new byte[userMsg.Count()];
userBuffer = Encoding.ASCII.GetBytes(userMsg);
client.Send(userBuffer);
Console.ReadKey();
}
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
}
}
다음은 클라이언트의 코드입니다 :
public partial class MainWindow : Window
{
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
byte[] buffer = new byte[12];
public MainWindow()
{
InitializeComponent();
}
private void btn_Connect_Click(object sender, RoutedEventArgs e)
{
server = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
server.Connect(ipep);
if (server.Connected)
{
txt_Log.AppendText("\nConnected to target server.");
}
btn.IsEnabled = false;
btn_disc.IsEnabled = true;
}
private void btn_Disconnect_Click(object sender, RoutedEventArgs e)
{
server.Close();
if (!server.Connected)
{
txt_Log.AppendText("\nDisconnected to target server.");
}
btn.IsEnabled = true;
btn_disc.IsEnabled = false;
}
private void btn_Fetch_Click(object sender, RoutedEventArgs e)
{
if (buffer != null)
{
using (server)
{
server.Receive(buffer);
txt_Log.AppendText(System.Text.Encoding.Default.GetString(buffer));
buffer = null;
}
}
else
{
txt_Log.AppendText("\nNo data to send.");
}
}
}
을 닫을 때 처분 전화? "보낼 데이터 없음"이라고 쓰여 있습니까? ? 또는...? 참고 : 수신 코드는 엄청나게 무너졌습니다. TCP 데이터는 일반적으로 스트림입니다. 전송 된 좋은 청크에서 항상 "수신"하지는 않습니다. 당신은 읽은 바이트의 수를 알려주는'Receive'의 반환 값을 검사해야합니다 (이것은 전체 메시지 일 필요는 없으며, 단일 바이트 일 수도 있고 27 개의 메시지 일 수도 있습니다) –
: do you 소켓에 'NoDelay'가 활성화되어 있습니까? –
TCP 소켓 자습서를 읽으십시오. 여기에 몇 가지 일반적인 실수. – usr