今天闲着没事,就写写socket通信,感觉通信方面还是很有趣,但是Android都用第三方框架给替代了,所以今天写一个demo,有趣的朋友可以扩展,实现两台电脑进行聊天是没问题的。
服务端
package com.cyanbird.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Service {
//先开启服务端,后开启客户端。关闭先客户端,然后再服务端。
public static void main(String[] args) {
openService();
}
public static void openService() {
try {
ServerSocket serverSocket = new ServerSocket(8585, 10);
// 客户端传递过来的socket,accept是阻塞型的
System.out.println("服务端已经启动,等待链接");
Socket socket = serverSocket.accept();
System.out.println("------");
InputStream inputStream = socket.getInputStream();
InputStreamReader iReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(iReader);
String temp = null;
String info = "";
while ((temp = bufferedReader.readLine()) != null) {
info += temp;
}
System.out.println("服务端接收到消息:" + info + "------"
+ socket.getInetAddress() + "------" + socket.getPort());
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.print("服务端已应答");
pw.flush();
socket.shutdownOutput();
pw.close();
os.close();
bufferedReader.close();
inputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
客户端
package com.cyanbird.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
openClient();
}
public static void openClient() {
try {
Socket socket = new Socket("192.168.31.216", 8585);
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.print("我发消息了哟");
pw.flush();
socket.shutdownOutput();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String temp = null;
String info = "";
while ((temp = br.readLine()) != null) {
info += temp;
}
System.out.println("客户端接收到消息:" + info);
br.close();
isr.close();
is.close();
pw.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
只做了简单实现,代码封装没有太好,个人感觉功能可扩展会更有趣。