Android socket通信

本文介绍了Android中如何使用Socket进行通信。服务器端通过ServerSocket创建并监听指定端口,不断接受客户端连接请求,一旦有连接,就发送消息并关闭连接。客户端在Android应用中开启新线程,建立Socket连接,读取服务器发送的数据并显示。示例代码包括服务器端的SimpleServer和客户端的MainActivity。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



Socket accept():如果接受到一个客户端Socket的连接请求,该方法将返回一个与连接客户端Socket对应的Socket(每个TCP有2个Socket),否则该方法将一直处于等待状态,线程也被阻塞。

ServerSocket类提供的构造器
ServerSocket(int port):用指定的端口来创建一个ServerSocket。该端口应该是有一个有效的端口整数值:0~65535.
ServerSocket(int port,int backlog):增加一个用来改变连接队列长度的参数backlog.
ServerSocket(int port,int backlog,InetAddress localAddr):在机器存在多个IP地址的情况下,允许通过localAddr这个参数来指定将ServerSocket绑定到指定的IP地址。

ServerSocket使用完毕后,应使用ServerSocket的close()方法来关闭ServerSocket。通常情况下,服务器不应该只接受一个客户端请求,而应该不断的接受来自客户端的所有请求,所以JAVA
通常会通过循环不停的调用ServerSocket的accept()方法,如以下代码片段所示

ServerSocket ss = new ServerSocket(30000);
while(true)
{
 Socket s = ss.accept();
 //通信内容
}


使用Socket进行通信
Socket(InteAddress/String rempteAddress,int port):连接到远程主机,远程端口的Socket,该构造器没有指定本地地址,本地端口,默认使用本地主机的默认IP地址,默认使用系统指定
的IP地址。

Socket(InteAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):创建连接到指定远程主机,远程端口的Socket,并指定本地IP地址和本地端口号,使用于本
地主机有多个IP地址的情况。

服务器端PC上运行,JAVA实现

public class SimpleServer
{
 public static void main(String[] args) throws IOException
 {
  ServerSocket ss = new ServerSocket(30000);
  while(true)
  {
   Socket s = ss.accept();
   OutputStream os = s.getOutStream();
   os.write(" 您好!\n".getBytes("utf-8"));
   os.close();
   s.close();
  } 
 }

}

客户端 Android
public class MainActivity extends Activity {
 EditText show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show = (EditText) findViewById(R.id.show);
        show.setText("来自服务");
        new Thread()
        {
         @Override
         public void run()
         {
          try
          {
           Socket socket = new Socket("192.168.8.32",30002);
           BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//将Socket对应的输入流包装成BufferedReader
           String line = br.readLine();
           show.setText("来自服务器的数据"+line);
           br.close();
           socket.close();
          }catch(IOException e)
          {
           e.printStackTrace();
          }
         }
        }.start();
    }
   
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值