C# Can';无法从服务器获取响应
大家好,谢谢你们花时间帮助我解决我的问题。我刚刚开始编程,所以如果我问了一些愚蠢的问题,请原谅我 我的Windows窗体应用程序中有一个用C#编写的服务器,还有一个连接到服务器的客户端。客户端是一个用Java编写的Android应用程序 我可以成功地将数据(XML字符串)连接并发送到服务器。我的问题是,无论我做什么,我都无法从服务器获得“blablabla字符串已成功接收谢谢”的响应。要么是因为服务器并没有发送数据,要么是因为我的客户端并没有收到数据。虽然我已经搜索并尝试了不同的代码组合,但我还是搞不懂 下面是服务器和客户端的代码: 客户:C# Can';无法从服务器获取响应,c#,java,android,sockets,tcplistener,C#,Java,Android,Sockets,Tcplistener,大家好,谢谢你们花时间帮助我解决我的问题。我刚刚开始编程,所以如果我问了一些愚蠢的问题,请原谅我 我的Windows窗体应用程序中有一个用C#编写的服务器,还有一个连接到服务器的客户端。客户端是一个用Java编写的Android应用程序 我可以成功地将数据(XML字符串)连接并发送到服务器。我的问题是,无论我做什么,我都无法从服务器获得“blablabla字符串已成功接收谢谢”的响应。要么是因为服务器并没有发送数据,要么是因为我的客户端并没有收到数据。虽然我已经搜索并尝试了不同的代码组合,但我还
public void functionSend (View view)
{
RadioGroup type = (RadioGroup) findViewById(R.id.radioGroupType);
TextView ip = (TextView) findViewById(R.id._ip);
TextView port = (TextView) findViewById(R.id.port);
TextView event = (TextView) findViewById(R.id.event);
TextView amount = (TextView) findViewById(R.id.amount);
TextView comment = (TextView) findViewById(R.id.comment);
Spinner currency = (Spinner) findViewById(R.id._currencySpinner);
_ip = ip.getText().toString();
_event = event.getText().toString();
_amount = amount.getText().toString();
_comment = comment.getText().toString();
if (_comment.equals(""))
{
_comment = "empty";
}
_currency = currency.getSelectedItem().toString();
if (port.getText().toString().equals(""))
{
_port = 3344; port.setText("3344");
}
else
{
_port = Integer.parseInt(port.getText().toString());
}
rbID = type.getCheckedRadioButtonId();
if (rbID == R.id.RadioButtonOutgo)
{
_type = "outgo";
}
else
{
_type = "income";
}
//------formam XML string--------
method = "create event";
key = "123456";
//formam stringul xml care i-l vom transmite catre server
clientXMLStream = "<?xml version='1.0' encoding='UTF-8'?>";
clientXMLStream = clientXMLStream + "\n <Client>";
clientXMLStream = clientXMLStream + "\n <ClientKey>" + key + "</ClientKey>";
clientXMLStream = clientXMLStream + "\n <Method>" + method + "</Method>";
clientXMLStream = clientXMLStream + "\n <ForDay>" + day + "</ForDay>";
clientXMLStream = clientXMLStream + "\n <ForMonth>" + (month+1) + "</ForMonth>";
clientXMLStream = clientXMLStream + "\n <ForYear>" + year + "</ForYear>";
clientXMLStream = clientXMLStream + "\n <Event>" + _event + "</Event>";
clientXMLStream = clientXMLStream + "\n <Amount>" + _amount + "</Amount>";
clientXMLStream = clientXMLStream + "\n <Type>";
clientXMLStream = clientXMLStream + _type + "</Type>";
clientXMLStream = clientXMLStream + "\n <Currency>" + _currency + "</Currency>";
clientXMLStream = clientXMLStream + "\n <Comment>";
clientXMLStream = clientXMLStream + _comment + "</Comment>";
clientXMLStream = clientXMLStream + "\n </Client>";
//--------------------------------
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
try
{
Socket socket = null;
socket = new Socket(_ip, _port);
//socket.setSoTimeout(2000);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream.writeBytes(clientXMLStream.toString());
event.setText(dataInputStream.readUTF().toString());
dataOutputStream.flush();
socket.close();
}
catch (Exception e)
{
}
}
首先,当你发现一个异常时,做一些事情。(额外提示:日志记录很好,printStacktrace更好)
void startServer()
{
Thread listenThread = new Thread(new ThreadStart(listenToMessages));
listenThread.Start();
}
public void listenToMessages()
{
tcplistener.Start();
while (true)
{
TcpClient client = tcplistener.AcceptTcpClient();
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
public void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
bytesRead = 0;
try
{
bytesRead = clientStream.Read(message, 0, 4096);
NetworkStream _clientStream = tcpClient.GetStream();
ASCIIEncoding _encoder = new ASCIIEncoding();
byte[] buffer = _encoder.GetBytes("Some Contacts as a string!");
byte[] lengthBuffer = BitConverter.GetBytes(buffer.Length);
clientStream.Write(lengthBuffer, 0, lengthBuffer.Length);
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
tcpClient.Close();
//clientStream.Close();
}
catch
{
break;
}
if (bytesRead == 0)
{
break;
}
tcpClient.Close();
ASCIIEncoding encoder = new ASCIIEncoding();
processRemoteInputs(encoder.GetString(message, 0, bytesRead));
//reply
}
}
void stopServer()
{
}
void processRemoteInputs(String clientXmlString)
{
XmlDocument remote = new XmlDocument();
remote.LoadXml(clientXmlString);
XmlNode method = remote.SelectSingleNode(".//Client/Method");
if (method.InnerText == "create event")
{
XmlNode remoteDay = remote.SelectSingleNode(".//Client/ForDay");
_neSelDay = Convert.ToInt16(remoteDay.InnerText);
XmlNode remoteMonth = remote.SelectSingleNode(".//Client/ForMonth");
_neSelMonth = Convert.ToInt16(remoteMonth.InnerText);
XmlNode remoteYear = remote.SelectSingleNode(".//Client/ForYear");
_neSelYear = Convert.ToInt16(remoteYear.InnerText);
XmlNode remoteEvent = remote.SelectSingleNode(".//Client/Event");
String _remoteEvent = remoteEvent.InnerText;
XmlNode remoteAmount = remote.SelectSingleNode(".//Client/Amount");
String _remoteAmount = remoteAmount.InnerText;
XmlNode remoteType = remote.SelectSingleNode(".//Client/Type");
String _remoteType = remoteType.InnerText;
XmlNode remoteCurrency = remote.SelectSingleNode(".//Client/Currency");
String _remoteCurrency = remoteCurrency.InnerText;
XmlNode remoteComment = remote.SelectSingleNode(".//Client/Comment");
String _remoteComment = remoteComment.InnerText;
addNewEvent(_remoteEvent, _remoteAmount, _remoteType, _remoteCurrency, _remoteComment);
setMonthLabel(); clearAllCurrentRows();
loadXmlIntoDataGridView(); displayMonthDebit(); _monthDataGrid.Rows[Convert.ToInt16(_neSelDay) - 1].Selected = true;
_monthDataGrid.CurrentCell = _monthDataGrid.Rows[Convert.ToInt16(_neSelDay) - 1].Cells[0]; displayDetailedInfoOnRowSelect();
displayMonthChart();
}
}