运行 1.10 通信 option cte super 转换成 generated 服务器
Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信。通过建立socket连接,可为通信双方的数据传输传提供通道。socket的主要特点有数据丢失率低,使用简单且易于移植。
玩socket通信要一台手机,建立一个app工程(作为客户端),一个普通java工程(作为服务端)
=====================================================================================================================================================
服务端代码:
- public class socketSer {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- ServerSocket serverSocket = null;
- try {
- // 创建一个ServerSocket对象,并让这个Socket在1989端口监听
- serverSocket = new ServerSocket(1989);
- // 调用ServerSocket的accept()方法,接受客户端所发送的请求,
- // 如果客户端没有发送数据,那么该线程就停滞不继续
- Socket socket = serverSocket.accept();
- // 从Socket当中得到InputStream对象
- InputStream inputStream = socket.getInputStream();
- byte buffer[] = new byte[1024 * 4];
- int temp = 0;
- // 从InputStream当中读取客户端所发送的数据
- while ((temp = inputStream.read(buffer)) != -1) {
- System.out.println(new String(buffer, 0, temp));
- }
- serverSocket.close();
- } catch(IOException e) {
- e.printStackTrace();
- }
- }
- }
1、监听一个端口
2、堵塞在accept方法中,直到有数据传送
3、将socket的输入流显示出来
4、服务器端要创建的是ServerSocket
================================================================================================================================================================
服务端activity:
- public class MainActivity extends Activity {
- @Override protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
- @Override public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- public void getButton(View v) {
- new socketThread().start(); //建立socket连接这种耗时操作要在子线程中进行
- }
- }
- class socketThread extends Thread {
- public void run() {
- try {
- //对ip为192.168.1.104的1989端口建立socket连接
- Socket socket = new Socket("192.168.1.104", 1989);
- //在连接的基础上得到输出流
- OutputStream out = socket.getOutputStream();
- String info = "asdfghjkl";
- //将字符串转换成byte数组
- byte[] buffer = info.getBytes();
- //信息写入输出流
- out.write(buffer);
- //传送出去
- out.flush();
- System.out.println("发送成功");
- } catch(UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch(IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
1、布局只有一个按钮,点击即刻发送信息
2、因socket通信时连接网络的耗时操作,所以必须在子线程中运行,否则虚拟机挂掉
3、与一个ip地址的一个端口建立socket通信,再用输出流送出去
套接字通信(TCP)
来源: http://www.bubuko.com/infodetail-2333848.html