已完成的步骤:
我正在运行服务器,在socket 4444上寻找连接。
我将android应用程序连接到套接字。
我让android应用程序通过套接字连接发送两个参数。
我让服务器摘要两个独立的参数并相应地处理它们。
当我尝试发回信息时,我的问题就开始了。
请大家帮我一个客户端类和服务器类的示例,使用BufferedReader
和PrintWriter
将数据从客户端发送到服务器,接受服务器端的数据和返回客户端要接收的数据?
谢谢你的帮助。
答案 0 :(得分:1)
从套接字输出流
创建一个新的PrintWriter PrintWriter writer = new PrintWriter(new BufferedOutputStream(socket.getOutputStream()));
writer.write("blather");
writer.flush();
答案 1 :(得分:0)
不要使用读写器有时会导致问题,例如我们无法预测字符串的结尾等。所以请写或读字节或字节数组。这是更好的方法。
以下是样本编码片段
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());
//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);
(Toast.makeText(this.actitivity,"Result : "+resultStr,Toast.LENGTH_SHORT)).show();
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)
{
}
}