私はAndroid1.6を使用しています。私のオフィスには、HTTPpostメソッドを介してデータを送信するアプリケーションがあります。
ソケット経由でデータを送信するモジュールを追加したいソケット(出力ストリーム)経由でデータを正しく送信サーバー側(c#ソケットアプリケーション)のソケットアプリケーションで正しく受信する
ただし、HTTP postメソッドでは、一部のデータがパラメーターとして渡されます。一部のデータをパラメーターとして送信し、一部のデータをストリームで送信するためのメソッドをソケットで見つけることができません。
以下は、outpustreamを介してソケット経由でデータを送信するために行ったコードです。
socket=new Socket(this.ipAddress,this.port_number);
//socket.setSocketImplFactory(fac)
Log.i(tagName, "after creating sokcet");
os=socket.getOutputStream();
is=socket.getInputStream();
dos=new DataOutputStream(os);
Log.i(tagName, "after creating ouput streams");
dis=new DataInputStream(is);
Log.i(tagName, "after creating input streams");
//dos.writeUTF(msg[i].trim());
//dos.write(msg[i].trim().getBytes());
//dos.writeUTF(msg[i].trim());
dos.write(msg[i].trim().getBytes()); //data written as bytes
//dos.writeUTF(str)
dos.flush();
Log.i(tagName, "after writing data to os");
StringBuilder sbuilder=new StringBuilder();
///*
int ch;
byte bt=1;
while((bt=(byte) dis.read())!=-1)
{
Log.i(tagName, "ch="+bt);
byte temp[]=new byte[1];
//temp[0]=(byte)ch;
temp[0]=(byte)bt;
String tempStr1=new String(temp);
Log.i(tagName, "tempstr:"+tempStr1);
sbuilder.append(tempStr1);
Log.i(tagName, "Data fro server : "+sbuilder.toString());
tempStr1=null;
}
//*/
//byte tt[]=new byte[dis.readLine()]
//resultStr=dis.readLine();resultStr=resultStr.trim();
resultStr=sbuilder.toString();
Log.i(tagName, "server res :"+resultStr);
if(dos!=null)
{
try
{
dos.close();
}
catch(Exception ex)
{
}
}
if(dis!=null)
{
try
{
dis.close();
}
catch(Exception ex){}
}
if(socket!=null)
{
try
{
socket.close();
}
catch(Exception ex)
{
}
}
上記のコーディングスニペットは正しく機能します。
ただし、HTTP postメソッドでは、パラメーターとしてのユーザー名とパスワード、およびストリーム内の実際のデータ。そのように、ユーザー名とパスワードをパラメーターで送信し、実際のストリームで送信したいと思います。