首先是客户端想服务端发送信息
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/butConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40dp"
android:gravity="center"
android:text="连接服务器"
android:textSize="20sp" />
<Button
android:id="@+id/butSend"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="40dp"
android:gravity="center"
android:text="发送消息"
android:textSize="20sp" />
</LinearLayout>
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Socket socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button butConnect = findViewById(R.id.butConnect);
Button butSend = findViewById(R.id.butSend);
butConnect.setOnClickListener(this);
butSend.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.butConnect:
new Thread() {
@Override
public void run() {
try {
socket = new Socket("192.168.1.100", 9999);
Log.i("Android", "与服务器建立连接:" + socket);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
break;
case R.id.butSend:
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();
break;
default:
break;
}
}
}
服务端 Java
apply plugin: 'java-library'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
tasks.withType(JavaCompile){
options.encoding = "UTF-8"}
sourceCompatibility = "7"
targetCompatibility = "7"
public class ServerClient {
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();
}
}
服务端向客户端发送信息
public class MyClass {
public static void main(String[] args) {
try {
InetAddress addr = InetAddress.getLocalHost();
System.out.println("local host:"+addr);
ServerSocket serverSocket = new ServerSocket(50000);
System.out.println("服务器已连接");
while(true){
System.out.println("123");
Socket socket = serverSocket.accept();
OutputStream outputStream = socket.getOutputStream();
outputStream.write("你好,我是服务器\n".getBytes("utf-8"));
outputStream.close();
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class MainActivity extends AppCompatActivity {
private Socket socket;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
textView = (TextView) findViewById(R.id.tv);
new Thread(new Runnable() {
@Override
public void run() {
try {
System.out.println(" xxx ");
socket = new Socket("192.168.1.100", 50000);
// socket.setSoTimeout(10000);//设置10秒超时
System.out.println("与服务器建立连接:" + socket);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = br.readLine();
System.out.println("与服务器建立连接:" + line);
Message msg = new Message();
msg.what = 1;
msg.obj = line;
handler.sendMessage(msg);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1) {
textView.setText("这是来自服务器的数据:" + msg.obj.toString());
}
}
};
}
这里的地址要一致