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) 服务器等待说明
2.Android客户端、服务端具体实现
1)Android客户端
-
package
com.example.socketclient;
-
-
import
java.io.DataOutputStream;
-
import
java.io.IOException;
-
import
java.net.Socket;
-
import
java.net.UnknownHostException;
-
-
import
android.app.Activity;
-
import
android.os.Bundle;
-
import
android.util.Log;
-
import
android.view.View;
-
-
/**
-
* 客户端
-
*
-
*/
-
public
class
MainActivity
extends
Activity {
-
-
@Override
-
protected
void
onCreate(Bundle savedInstanceState) {
-
super
.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
}
-
-
private
Socket socket;
-
-
/**
-
* 建立服务端连接
-
*/
-
public
void
conn(View v) {
-
new
Thread() {
-
-
@Override
-
public
void
run() {
-
-
try
{
-
socket =
new
Socket(
“100.100.28.26”
,
9999
);
-
Log.e(
“JAVA”
,
“建立连接:”
+ socket);
-
}
catch
(UnknownHostException e) {
-
e.printStackTrace();
-
}
catch
(IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}.start();
-
}
-
-
/**
-
* 发送消息
-
*/
-
public
void
send(View v) {
-
new
Thread() {
-
@Override
-
public
void
run() {
-
-
try
{
-
// socket.getInputStream()
-
DataOutputStream writer =
new
DataOutputStream(socket.getOutputStream());
-
writer.writeUTF(
“嘿嘿,你好啊,服务器..”
);
// 写一个UTF-8的信息
-
-
System.out.println(
“发送消息”
);
-
}
catch
(IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}.start();
-
}
-
-
}
2)服务端
-
package
com.example.socketserver;
-
-
import
java.io.DataInputStream;
-
import
java.io.IOException;
-
import
java.net.ServerSocket;
-
import
java.net.Socket;
-
-
/**
-
* 服务端
-
*
-
*/
-
public
class
SocketServer{
-
-
public
static
void
main(String[] args) {
-
startService();
-
}
-
-
/**
-
* 启动服务监听,等待客户端连接
-
*/
-
private
static
void
startService() {
-
try
{
-
// 创建ServerSocket
-
ServerSocket serverSocket =
new
ServerSocket(
9999
);
-
System.out.println(
“–开启服务器,监听端口 9999–”
);
-
-
// 监听端口,等待客户端连接
-
while
(
true
) {
-
System.out.println(
“–等待客户端连接–”
);
-
Socket socket = serverSocket.accept();
//等待客户端连接
-
System.out.println(
“得到客户端连接:”
+ socket);
-
-
startReader(socket);
-
}
-
-
}
catch
(IOException e) {
-
e.printStackTrace();
-
}
-
}
-
-
/**
-
* 从参数的Socket里获取最新的消息
-
*/
-
private
static
void
startReader(
final
Socket socket) {
-
-
new
Thread(){
-
@Override
-
public
void
run() {
-
DataInputStream reader;
-
try
{
-
// 获取读取流
-
reader =
new
DataInputStream( socket.getInputStream());
-
while
(
true
) {
-
System.out.println(
“*等待客户端输入*”
);
-
// 读取数据
-
String msg = reader.readUTF();
-
System.out.println(
“获取到客户端的信息:”
+ msg);
-
}
-
}
catch
(IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}.start();
-
}
-
-
}
3.下来我们运行Demo来看一看效果