对于套接字C#中的每个请求返回响应

时间:2015-07-19 08:23:38

标签: c# android sockets

我想为socket c#和android中的每个请求返回响应创建。 我找到相关的套接字并发送请求,询问我需要的数据。 发送请求后,我收到字节,直到它发送响应。然后我停止接收。

我的服务器需要同时处理多个客户端,最好是同时处理来自客户端的多个请求。我需要客户端和服务器能够随时接收消息

我写了这段代码:

message = Encoding.UTF8.GetString(dataRec,0,c);
            dataRec = new byte[2048];
            switch(message)
            {
                case "list-menu":
                    sendListMenu();
                    break;

                case "login":

                    isLogin(message);
                    break;
            }

登录方法

public void isLogin(string str){
          string message = "";
          Model_Users users;

         dataSend=Encoding.UTF8.GetBytes("send-result");
         newsocket.Send(dataSend);
         //newsocket.close(); if close not receive            
         c = newsocket.Receive(dataRec);
         message = Encoding.UTF8.GetString(dataRec,0,c);

          XmlSerializer xml = new XmlSerializer(typeof(Model_Users));

              using (TextReader reader = new StringReader(message))
              {
                  if (reader != null)
                  {
                      users = (Model_Users)xml.Deserialize(reader);
                      MessageBox.Show(users.username);
                      dataSend = Encoding.UTF8.GetBytes("success-login");
                      newsocket.Send(dataSend);
                      newsocket.Close();
                  }

              }
          }

android代码(客户端):

  socket = new Socket();
            socketAddress = new InetSocketAddress(cursor.getString(cursor.getColumnIndex("ip")), 9999);
            socket.connect(socketAddress, 10000);
            bufferWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            bufferWriter.write(getrequest);
            bufferWriter.flush();
            String rvdMsgTxt = "";
            stringBuilder = new StringBuilder();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            while ((rvdMsgTxt = bufferedReader.readLine()).equals("success-login")) {
                stringBuilder.append(rvdMsgTxt);
                bufferedReader.mark(100);
                bufferedReader.reset();
            }

            bufferWriter.write(XMLConvertor.usersSerializeXML("user", "pass"));
            bufferWriter.flush();

但这不起作用。

1 个答案:

答案 0 :(得分:0)

这由newsocket.Shutdown解决(SocketShutdown.Send);