android开发-------socket实现C/S端相互通信
2015-07-20 11:02
615 查看
加深一下自己对于socket的理解和应用,今天写了一个demo利用socket进行C/S的相互通信。
下面贴代码:
服务器端(eclipse+tomcat+java构建)
通信服务类,继承Thread
接下来是主方法:
服务器运行成功则如下
接下来是客户端(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();
}
主活动:
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());
}
}
};
}
由于布局的代码比较简单,我就不贴出来了,记得加上联网的权限。下面是运行结果:
发送消息
客户端接收到服务器端消息:
服务器端接受的客户端消息:
由于我发了两次,所以服务器端收到了两次的消息,看起来还是比较简单的,只要认真学习了socket之间的通信,还是很好捣鼓出来的~
下面贴代码:
服务器端(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之间的通信,还是很好捣鼓出来的~
相关文章推荐
- Android中的JSON详细总结
- 【Record】ART:Android RunTime
- Android NDK编程问题
- Android 自定义View (一)
- 仿哔哩哔哩应用客户端Android版源码项目
- 仿哔哩哔哩应用客户端Android版源码项目
- Android Studio 修改字体大小
- Android中使用Gson解析JSON数据的两种方法
- 详述Android插件化原理
- Android源码及SDK国内镜像下载
- android 布局文件 ScrollView 中的 listView item 显示不全解决方案
- Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- Android应用安全之运行环境检查
- Android 和php 短接base64 乱码问题
- Android改变状态栏颜色导航不变
- Android surfaceView(一)
- Android多种方式实现自定义Dialog对话框
- 使用命令启动android sdk manager
- Android ProgressDialog工具类