对于插座C#每个请求返回响应 [英] For each request return response in socket C#

查看:170
本文介绍了对于插座C#每个请求返回响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个插座C#和Android的每个请求返回响应。
我找到相关的插座,发送一个请求,要求我需要的数据。
发送请求后,我收到字节,直到它发出的响应。然后,我停止接收。

I want to create for each request return response in socket c# and android. I find the relevant socket and send a request, asking for the data I need. After sending the request, I receive bytes until it sends the response. Then I stop receiving.

我的服务器需要同时处理多个客户端,并从客户端一次preferably多个请求。我需要在客户端和服务器,以便能够在任何时间接收消息

My server will need to handle many clients at once, and preferably multiple requests from a client at once. I need both the client and server to be able to receive messages at any time

我写这篇code:

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();
                  }

              }
          }

安卓code(客户端):

android code (client):

  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();

但是,这并不正常工作。

But this doesn't work.

推荐答案

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

this SOLVED by newsocket.Shutdown(SocketShutdown.Send);

这篇关于对于插座C#每个请求返回响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆