クライアントの種類はAndroidで、言語はJavaです。サーバーにjson文字列を送信
このクラスはサーバーに接続し、接続されたサーバーへの出力ストリームを取得します。このコードの
class ConnectToServer extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... params)
{
try {
socket = new Socket(ip,port);
output = new DataOutputStream(socket.getOutputStream());
Log.d(TAG, "Connected To Server!");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
class SendToServer extends AsyncTask<Void, Void, Void>
{
//Our Json object
JSONObject obj;// = new JSONObject();
//this class is called when the login button is pressed, it sends the username and password as arguments
public SendToServer(String username, String password)
{
//instantiate the new object
obj = new JSONObject();
try {
//create the first field Type
obj.put("Type", new Integer(1)); //Type is something our Server will switch against-Type 1 = login request
obj.put("username", username); //our server will get username
obj.put("password",password); //our server will get password
} catch (JSONException e) {
e.printStackTrace(); //if we get problems let the developer know
}
}
@Override
protected Void doInBackground(Void... params)
{
String jsonText = obj.toString(); //convert our json object into a string
byte[] b =jsonText.getBytes(Charset.forName("UTF-8")); //convert our json object into a byte array
try {
output.writeInt(b.length); // write length of the message
output.write(b); // write the message
output.flush(); //flush - empties the pipe
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}
目的は、サーバーのユーザーの資格情報を送信することです。
このC#のサーバーでprivate void serverClient()
{
while(true)
{
int len = ns.ReadByte(); //read how much data
if (len == 0) //if this == 0 this means client has quit the program
break; //break out of loop and remove client from array list
if (len > 0) //we have a message
{
//read mess
byte[] message = new byte[len]; //create byte array
ns.Read(message, 0, message.Length); //read into the message byte array
string text = Encoding.ASCII.GetString(message, 0, len);
string text1 = Encoding.UTF8.GetString(message, 0, len); //build string from byte array up to how much data we got.
Console.WriteLine(text1);
}
}
removeClients();
}
ので、Androidのクライアントは、資格情報を送信しますが、SendToServer
クラスが呼び出されたときに、クライアントがサーバーから切断します。
C#サーバーにJson文字列を送信して、フィールドに応じて文字列を読み取り、オブジェクトにシリアル化できるようにするにはどうすればよいですか。
あなたのJavaコードは、私が知る限り、jsonオブジェクトにのみ書き込みます。ネットワーキングとは関係ありません。 – Rob
@Robクライアントがサーバーに接続し、出力ストリームを受け取ることを示すコードをいくつか追加しました。出力ストリーム "write"メソッドは、 "SendToServer"クラスで使用されます。 – Moynul