Android 客户端socket通讯

来源:互联网 发布:057188158198 淘宝打来 编辑:程序博客网 时间:2024/05/09 03:45

一个Socket通信的完成,需要客户端和服务器端的配合,这个配合就好比,两个人在电话中聊天,当甲拨出号码,乙在另一头接起电话时,他们直接就已经搭建了一个沟通的桥梁,对于客户端和服务器端是一样的。客户端通过Socket向指定ip地址的某端口发出数据通信请求,而服务器端此时也正在监听该端口的情况,也就是说,对于指定的ip地址和端口号我们完全可以认为是甲乙电话通讯时的电话号码。
       Socket通信分为两种一个是UDP,一个是TCP,UDP的好处是:速度快,但是缺点是此协议只管发送数据,并不管对方是否接收到数据,而TCP每次发出数据后都要等待对方传回数据做以肯定,然后再发送下一部分数据。但是速度不如UDP快。
    下面是我做的实例中的部分代码:

代码
public class SocketClient extends Activity {
/** Called when the activity is first created. */
TextView tv = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button tcpbtn = (Button) this.findViewById(R.string.Id1);
Button udpbtn = (Button) this.findViewById(R.string.Id2);
tv = (TextView) this.findViewById(R.string.text1);


//tcp通信过程
tcpbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
Socket s = new Socket("192.168.0.115", 4567);//创建一个socket对象,绑定要通信的服务器端Ip和端口
OutputStream out = s.getOutputStream();//将要传递的数据进行字节数组处理,然后以输出流的形式发送出去
out.write(tv.getText().toString().getBytes());
out.flush();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

});

//udp通信过程
udpbtn.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
DatagramSocket ds=new DatagramSocket(5678);
InetAddress serverAddr= InetAddress.getByName("192.168.0.115");//绑定要通信的服务器端IP
byte[] data=tv.getText().toString().getBytes();
DatagramPacket packet=new DatagramPacket(data,data.length,serverAddr,5678);
ds.send(packet);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

 

});
}
}

原创粉丝点击