您的位置:首页 > 移动开发 > Android开发

android开发-------socket实现C/S端相互通信

2015-07-20 11:02 615 查看
加深一下自己对于socket的理解和应用,今天写了一个demo利用socket进行C/S的相互通信。

下面贴代码:

服务器端(eclipse+tomcat+java构建)

通信服务类,继承Thread

public class ChatServer extends Thread {
private ServerSocket serverSocket=null;
private final static int PORT=5000;
private BufferedWriter bufferedWriter;
private BufferedReader bufferedReader;
private int i=0;
ChatServer() throws IOException{
serverSocket=new ServerSocket(PORT,100);

}
@Override
public void run() {;
java.net.Socket client;
//定义接收到的文本
String txt;
while (true) {
//等待客户端连接
try {
client=serverSocket.accept();
//响应客户端连接
while (true) {
bufferedReader=new BufferedReader(new InputStreamReader(client.getInputStream()));
String line="";
StringBuilder sb=new StringBuilder();
if ((line=bufferedReader.readLine())!=null) {
sb.append(line);
}
System.out.println("得到客户端数据:"+sb.toString());
//发送返回客户端的消息
String sendmsg="得到服务器端数据:"+(i++);
SendMessage(client,sendmsg);
//中断,继续等待连接请求
if (true) {
break;
}

}
//关闭连接
bufferedWriter.close();
bufferedReader.close();
client.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
private void SendMessage(java.net.Socket socket,String msString) throws IOException {
//获得输出流
bufferedWriter=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//写进数据
bufferedWriter.write(msString+"\n");
bufferedWriter.flush();

}

}


接下来是主方法:

public static void main(String[] args) throws IOException {
ChatServer chatServer=new ChatServer();
if (chatServer!=null) {
//启动线程
System.out.println("启动服务器端:");
chatServer.start();
}


服务器运行成功则如下



接下来是客户端(android studio构建)

客户端服务类:

public class ClientServer {

private Socket socket;

private BufferedReader bufferedReader=null;

private BufferedWriter bufferedWriter=null;

protected ClientServer() throws IOException {

socket=new Socket(“10.16.224.147”,5000);

}

protected void sendMsg(String msg) throws IOException {

bufferedWriter=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

bufferedWriter.write(msg+”\n”);

bufferedWriter.flush();

}

protected String receiveMsg() throws IOException {
bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuilder sb=new StringBuilder();
String line="";
if ((line=bufferedReader.readLine())!=null){
sb.append(line);
}
return sb.toString();
}


}

主活动:

public class MainActivity extends AppCompatActivity {

private TextView textViewreceive;

private Button button;

private EditText edit;

private Handler handler=new Handler(){

@Override

public void handleMessage(Message msg) {

if (msg.what==1){

edit.setText(“”);

textViewreceive.setText(msg.obj.toString());

}

}

};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewreceive= (TextView) findViewById(R.id.receive);
edit= (EditText) findViewById(R.id.edit);
button= (Button) findViewById(R.id.send);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
try {
ClientServer clientServer = new ClientServer();
clientServer.sendMsg(edit.getText().toString());
String receive=clientServer.receiveMsg();
Message message=new Message();
message.what=1;
message.obj=receive;
handler.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
}

}
}).start();

}
});

}


}

由于布局的代码比较简单,我就不贴出来了,记得加上联网的权限。下面是运行结果:



发送消息



客户端接收到服务器端消息:



服务器端接受的客户端消息:



由于我发了两次,所以服务器端收到了两次的消息,看起来还是比较简单的,只要认真学习了socket之间的通信,还是很好捣鼓出来的~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: