android Socket 编程
Socket 通信
1.UDP实现 (DatagramSocket)
【客户端】
//首先创建一个DatagramSocket对象
DatagramSocket socket = new DatagramSocket(4567);
//创建一个InetAddress
InetAddress serverAddress = InetAddress.getByName("192.168.1.104");
String str = "hello"; //这是要传输的数据
byte data [] = str.getBytes(); //把传输内容分解成字节
//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);
//调用socket对象的send方法,发送数据
socket.send(packet);
【服务器端】
//创建一个DatagramSocket对象,并指定监听的端口号
DatagramSocket socket = new DatagramSocket(4567);
byte data [] = new byte[1024];
//创建一个空的DatagramPacket对象
DatagramPacket packet = new DatagramPacket(data,data.length);
//使用receive方法接收客户端所发送的数据,
//如果客户端没有发送数据,该进程就停滞在这里
socket.receive(packet);
String result = new String(packet.getData(),packet.getOffset(),packet.getLength());
2.TCP通信
【客户端】
创建一Socket对象并指明服务器端的IP及端口号
Socket socket = new Socket("192.168.1.0",45678);
//向服务器发送消息
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
out.println(message);
//从服务器接收消息
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String rString = is.readLine().toString();
【服务器端】
//创建一个ServerSocket对象,并让这个Socket在45678端口监听
serverSocket = new ServerSocket(45678);
//调用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)
{
String str = new String(buffer,0,temp);
//接下来可以对从客户端接收到的消息做处理
}
【Socket获取客户端IP地址及端口号】
Socket类包含一些非常有用的属性,这些属性允许确定关于正在连接的客户端的信息。其中关键信息之一
是返回EndPoint对象的RemoteEndPoint属性。EndPoint类本身是抽象的,要想收集有用的信息,需·要把
EndPoint强制类型转换为IPEndPoint对象。IPEndPoint类包含远程客户端的IP地址和端口号。具体用法如下:
TcpListener tcpl=new TcpListener(port);
Socket s=tcpl.AcceptSocket();
label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();
label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();
作者:zjbpku
补充:移动开发 , Android ,