약 1 주일 동안이 예외가 발생했으며 마침내 쉽게 읽을 수있는 코드 스 니펫으로 처리 할 수있었습니다.연결을 닫을 때 WindowsRT StreamSocket 예외가 발생합니다.
배경으로 저는 Windows RT 용 응용 프로그램을 프로그래밍 중이며 기본 소켓을 사용하려고합니다.
테스트를 위해 서버 역할을하는 로컬 소켓 수신기를 만들었습니다. 서버와 클라이언트 모두 소켓에서 읽기/쓰기가 가능해야합니다.
클라이언트와 서버 모두 어느 정도의 데이터가 유선을 통해 전송되는지 (또는 알고 있어야하는지) 알 수 없습니다. 이것은 절대적인 요구 사항입니다. 서버는 필요할 때 임의의 양의 데이터를 처리 할 수 있어야합니다. 여기
는 일례이다. 그것은 단위 테스트로 제시되는데, 그 이유는 그것이 내가 일관되게 오류를 만나는 이유이기 때문입니다.[TestMethod]
public async Task TestSomething()
{
// Setup local server
//
StreamSocketListener listener = new StreamSocketListener();
listener.ConnectionReceived += async (sender, args) =>
{
DataReader serverReader = new DataReader(args.Socket.InputStream);
await serverReader.LoadAsync(4096); // <-- Exception on this line
};
await listener.BindServiceNameAsync("10181");
// Setup client
//
using (StreamSocket socket = new StreamSocket())
{
await socket.ConnectAsync(new HostName("localhost"), "10181");
DataReader reader = new DataReader(socket.InputStream);
Task readTask = Listen(reader);
}
}
public async Task Listen(DataReader reader)
{
await reader.LoadAsync(4096);
}
예외는 서버가 LoadAsync(...)
를 호출하는 라인에서 발생하고, 단위 테스트가 종료 할 때 예외가 발생합니다 :이 예에서 단일 선을 제거하면 오류가 사라됩니다.
예외이다 (겉보기) 간단한 : 기존 연결이 원격 호스트에 의해 강제로 폐쇄되었다
. (HRESULT의 예외 : 0x80072746)
모든 단서는 크게 감사하겠습니다.
글쎄, 이것이 대답인지 확인하는 데는 시간이 걸렸지 만 그렇습니다. 당신의 응답을 주셔서 감사합니다 :) – riwalk