2012-03-23 5 views
0

데이터 통신 클래스의 간단한 프로젝트에서 작업하고 있습니다. 나는 그것이 최대 2 시간이 걸릴 것이라고 예측 했었지만, 웹에 연결하고 C#으로 작업하는 것은 처음으로 소프트웨어를 작성했으며, 꽤 큰 도로 충돌을 겪고있다.어려움 TcpClient를 사용하고 NetworkStreams를 사용하여 C#으로 서버와의 연결을 설정하십시오.

서버에 연결을 설정했지만 서버에서 전혀 피드백을받지 못하는 것 같습니다. 다음은 연결을 설정하기 위해 실행중인 코드입니다.

TcpClient conn = new TcpClient(); 
conn.Connect(host, port); 
StreamReader reader = new StreamReader(conn.GetStream()); 
StreamWriter writer = new StreamWriter(conn.GetStream()); 
Console.WriteLine(conn.Connected); //This line does print true. 
//Console.WriteLine(reader.ReadLine());  I thought I'd get a message when I initially 
//connected to the server but this line would hang 

여기에서 연결을 설정합니다. 프로젝트의 사양에 따르면 0을 입력하면 서버가 티켓 번호를 반환하도록 요구합니다. 그래서 다음과 같은 코드가 있습니다 :

writer.WriteLine("0"); 
return reader.ReadLine(); 

reader.ReadLine()을 실행하려고하면 프로그램이 멈 춥니 다. 나는 독자들에게 다른 방법들을 시도해 왔지만, 그것들 모두에 매달린 것처럼 보인다. 광산과 비슷한 설정으로 많은 코드 샘플을 살펴 봤습니다. 누구든지 내 코드 문제를 볼 수 있습니까? 나는 그 서버에 문제가 있다고 생각하지 않는다. 내 교수는 유닉스 명령 "telnet [host] [port]"를 사용하는 것에 관해서 뭔가를 말했고 나는이 코드에 대해 동일한 호스트와 포트를 사용했다. 나는 이것을 Windows 7 컴퓨터에서 개발 중입니다. C#과 네트워크 프로그래밍에 대한 나의 무지를 사과드립니다.

맹인 정보를 생략 한 경우 알려 주시기 바랍니다. 이것이 내가 처음으로 다루는 것이 긴급한 것을 빠뜨린 것 같아요.

감사합니다. 많은 I/O 장치가 더 효율적이기 때문에, 자주 정보를 버퍼

writer.WriteLine("0"); 
writer.Flush(); 
return reader.ReadLine(); 

스트림

는 O/I 최적화 :

답변

4

당신은 작가 (그리고 랩하는 스트림)은 출력의 플러시 있는지 확인해야 짧은 버스트보다 큰 데이터 스트림을 사용합니다. "0"은 스트림이 실제로 아무것도 보내지 않을 정도로 너무 작은 데이터 일 가능성이 큽니다. 이것은 디스크 I/O (파일 쓰기)와 같은 것에도 적용됩니다.

+1

또는 매번이 작업을 수행하지 않으려면 writer.AutoFlush 속성을 true로 설정할 수 있습니다. – KingCronus

+0

@ AdamKing yes 그렇지만 짧은 데이터 버스트를 많이 작성하는 경우 성능이 크게 저하 될 수 있습니다. 기본적으로 false 인 이유가 있습니다. –

+0

크리스, 그 사실을 압니다 만, @Toms 숙제 때문에 나는 그것이 큰 관심사라는 것을 알 수 없습니다. – KingCronus