socket是开发中绕不开的,有些场景中会用到,像及时通信呀,实时数据刷新呀,消息通知啦,巴拉巴拉等,这里会议一下,socket的简单用法.
服务端
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
/**
* 单人聊天服务端
*/
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("开始监听");
Socket socket = serverSocket.accept();
InputStream is = null;
OutputStream os = null;
boolean flag = true;
while(flag){
SocketAddress remoteSocketAddress = socket.getRemoteSocketAddress();
String client = "访客:["+remoteSocketAddress+"]";
System.out.println(client);
is = socket.getInputStream();
int len = 0;
byte[] bytes = new byte[1024];
StringBuffer sb = new StringBuffer();
while((len = is.read(bytes)) != -1){
// System.out.println("拼接数据....");
String string = new String(bytes, 0, len);
sb.append(string);
if(string.contains(System.lineSeparator())){
break;
}
}
System.out.println(client + ":"+sb);
// 写出响应
os = socket.getOutputStream();
Scanner scanner = new Scanner(System.in);
String sendMsg = scanner.next() + System.lineSeparator();
//没有换行符 无法确定对方是否结束发送数据了
//String sendMsg = scanner.next();
System.out.println("发送数据:"+sendMsg);
os.write(sendMsg.getBytes(StandardCharsets.UTF_8));
os.flush();
}
if(os != null){
os.close();
}
if(is != null){
is.close();
}
if(socket != null){
socket.close();
}
if(serverSocket != null){
serverSocket.close();
}
}
}
客户端
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
/**
* 单人聊天客户端
*/
public class client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost",9999);
SocketAddress server = socket.getRemoteSocketAddress();
boolean flag = true;
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
while (flag){
is = socket.getInputStream();
os = socket.getOutputStream();
Scanner scanner = new Scanner(System.in);
String next = scanner.next()+ System.lineSeparator();
//没有换行符 无法确定对方是否结束发送数据了
//String next = scanner.next();
os.write(next.getBytes(StandardCharsets.UTF_8));
os.flush();
int len = 0;
byte[] bytes = new byte[1024];
StringBuffer sb = new StringBuffer();
while((len = is.read(bytes)) != -1){
// System.out.println("拼接数据....");
String string = new String(bytes, 0, len);
sb.append(string);
if(string.contains(System.lineSeparator())){
break;
}
}
System.out.println(server + ":"+sb);
}
if(os != null){
os.close();
}
if(is != null){
is.close();
}
if(socket != null){
socket.close();
}
}
}
效果:
这里只做了一个简单的聊天功能,如有不当之处,还请诸位大佬多多指点.