Есть обыкновенная сетевая служба (Abacs биллинг). Соединяюсь с ней по telnet пишу различные сообщения, а она мне отвечает (Все прекрасно работает по telnet). Стоит задача написать WebService на asp.net для данной службы. Когда начинается socket.Receive программа зависает. Причем, не зацикливается в цикле, а именно виснет в момент получения первой порции данных.
Уважаемые гуру сетевого программирования .NET, скажите, что я делаю не так?
Неработающий код:
public static string GetResponse(string req)
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(config.ip, config.port);
int bytes = 0;
string resp = string.Empty;
byte[] buffer = new byte[256];
byte[] bytesReq = Encoding.ASCII.GetBytes("HELLO");
bytes = socket.Send(bytesReq, bytesReq.Length, SocketFlags.None);
if (socket.Connected)
{
do
{
bytes = socket.Receive(buffer, buffer.Length, SocketFlags.None);
resp += Encoding.ASCII.GetString(buffer);
}
while(bytes > 0);
}
socket.Close();
return resp;
}
Попробовал написать на java все работает, причем идеально:
public synchronized StringBuilder request(String request) throws OpenSocketException, TimeoutConnectException, CloseSocketException {
Socket clientSocket = new Socket();
Scanner in;
PrintWriter out;
StringBuilder result = new StringBuilder();
try {
clientSocket.connect(new InetSocketAddress(HOSTNAME, PORT), CONNECT_TIMEOUT);
out = new PrintWriter(clientSocket.getOutputStream());
in = new Scanner(clientSocket.getInputStream(), "Cp1251");
clientSocket.setSoTimeout(RECEIVE_TIMEOUT);
out.print(request);
out.flush();
try {
clientSocket.shutdownOutput();
} catch (IOException ex) {
throw new CloseSocketException(ex.getLocalizedMessage());
}
while (in.hasNextLine()) {
result.append(in.nextLine());
}
} catch (SocketException ex) {
throw new TimeoutConnectException(ex.getLocalizedMessage());
} catch (IOException ex) {
throw new OpenSocketException(ex.getLocalizedMessage());
} finally {
try {
clientSocket.close();
} catch (IOException ex) {
throw new CloseSocketException(ex.getLocalizedMessage());
}
}
return result;
}