android中的socket
1. android serversocket 服务器该怎么搭建
在Android中搭建服务器端,主要涉及到创建ServerSocket和Socket的步骤。具体来说,首先需要创建一个ServerSocket对象,这是服务器监听客户端连接的关键。接着,通过ServerSocket对象的accept方法接收来自客户端的连接请求,返回一个Socket对象,它代表了客户端与服务器之间的连接。
接下来,对于已经建立的Socket连接,需要打开连接到Socket的输入输出流,以便进行数据的读写操作。其中,输入流用于读取客户端发送的数据,输出流则用于向客户端发送数据。在进行数据读写时,应按照协议约定的数据格式进行操作,确保数据传输的准确性和可靠性。
在完成数据读写操作后,应关闭输入输出流,释放资源,避免资源泄漏。最后,关闭Socket连接,确保客户端与服务器之间的通信完全结束。
需要注意的是,在整个过程中,应确保线程安全,避免多线程环境下并发操作带来的问题。此外,还需对异常情况进行处理,确保程序的健壮性和稳定性。
总结来说,搭建Android服务器端的关键步骤包括创建ServerSocket和Socket,打开输入输出流,按照协议进行读写操作,最后关闭流和Socket。这些步骤需要细心操作,确保服务器能够稳定地与客户端进行通信。
2. android 中socket 怎样建立连接
参考如下内容,建立socker连接:
1.建立Socket连接
1) Socket 实现了TCP/IP协议,可以连接到网络上的上脑,并收发数据
2) ServerSocket 用于服务端,可以监听服务端口,等待客户端连接,连接后可以生成用于传输数据的Socket
3) 创建服务端
ServerSocket serverSocket = new ServerSocket(9999);
Socket socket = serverSocket.accept(); //等待客户端连接
4) 创建客户端
Socket socket = new Socket("100.100.28.26", 9999);
// 注意:注册网络权限;不能在主线程做网络连接
5) 客户端发送消息
DataOutputStream writer = new DataOutputStream(socket.getOutputStream());
writer.writeUTF("嘿嘿,你好啊,服务器.."); // 写一个UTF-8的信息
6) 服务端接收消息
DataInputStream reader = new DataInputStream( socket.getInputStream());
String msg = reader.readUTF();
7) 服务器等待说明
3. android socket有几种方法
/***第一种:客户端Socket通过构造方法连接服务器***/
//客户端Socket可以通过指定IP地址或域名两种方式来连接服务器端,实际最终都是通过IP地址来连接服务器
//新建一个Socket,指定其IP地址及端口号
Socket socket = new Socket("192.168.0.7",80);
/***Socket 客户端 一些常用设置***/
//客户端socket在接收数据时,有两种超时:1.连接服务器超时,即连接超时;2.连接服务器成功后,接收服务器数据超时,即接收超时
//*设置socket 读取数据流的超时时间
socket.setSoTimeout(5000);
//发送数据包,默认为false,即客户端发送数据采用Nagle算法;
//但是对于实时交互性高的程序,建议其改为true,即关闭Nagle算法,客户端每发送一次数据,无论数据包大小都会将这些数据发送出去
socket.setTcpNoDelay(true);
//设置客户端socket关闭时,close()方法起作用时延迟1分钟关闭,如果1分钟内尽量将未发送的数据包发送出去
socket.setSoLinger(true, 60);
//设置输出流的发送缓冲区大小,默认是8KB,即8096字节
socket.setSendBufferSize(8096);
//设置输入流的接收缓冲区大小,默认是8KB,即8096字节
socket.setReceiveBufferSize(8096);
//作用:每隔一段时间检查服务器是否处于活动状态,如果服务器端长时间没响应,自动关闭客户端socket
//防止服务器端无效时,客户端长时间处于连接状态
socket.setKeepAlive(true);
/*** Socket客户端向服务器端发送数据 ****/
//客户端向服务器端发送数据,获取客户端向服务器端输出流
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
//代表可以立即向服务器端发送单字节数据
socket.setOOBInline(true);
//数据不经过输出缓冲区,立即发送
socket.sendUrgentData(65);//"A"
//向服务器端写数据,写入一个缓冲区
//注:此处字符串最后必须包含“\r\n\r\n”,告诉服务器HTTP头已经结束,可以处理数据,否则会造成下面的读取数据出现阻塞
//在write()方法中可以定义规则,与后台匹配来识别相应的功能,例如登录Login()方法,可以写为write("Login|test,123 \r\n\r\n"),供后台识别;
bw.write("Login|test,123 \r\n\r\n");
//发送缓冲区中数据,必须有
bw.flush();
/*** Socket客户端读取服务器端响应数据 ****/
//socket.isConnected代表是否连接成功过
if((socket.isConnected() == true) && (socket.isClosed() == false)){//判断Socket是否处于连接状态
//客户端接收服务器端的响应,读取服务器端向客户端的输入流
InputStream is = socket.getInputStream();
//缓冲区
byte[] buffer = new byte[is.available()];
//读取缓冲区
is.read(buffer);
//转换为字符串
String responseInfo = new String(buffer);
//日志中输出
Log.i("TEST", responseInfo);
} //关闭网络
socket.close();
/***第二种:通过connect方法连接服务器***/
Socket socket_other = new Socket();
//使用默认的连接超时
socket_other.connect(new InetSocketAddress("192.168.0.7",80));
//连接超时2s
socket_other.connect(new InetSocketAddress("192.168.0.7",80),2000);
//关闭socket
socket_other.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}