版权声明:本文为博主原创文章,转载请说明出处,谢谢。 https://blog.csdn.net/qq_27070443/article/details/61614481
服务端
package me.mxzf;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @Title: TextServer
* @Dscription: 服务端
* @author Deleter
* @date 2017年3月12日 上午9:14:55
* @version 1.0
*/
public class TextServer {
public static void main(String[] args) {
try {
// 新建一个服务端实例,监听绑定1234端口
ServerSocket serverSocket = new ServerSocket(1234);
// accept阻塞直到有Socket进行握手
Socket socket = serverSocket.accept();
// 用Data输入输出流封装流通道
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(
socket.getOutputStream());
// 定义一些变量,用来接收来自"客户端"的信息
String content;
StringBuilder contents = new StringBuilder();
// 当没有消息来之前,readUTF()一直处于阻塞状态
while ((content = dis.readUTF()) != null) {
// 一开始readUTF()是阻塞的,直到有数据来便开始读入
// 如果readUTF()读到了流的尾部也就是null
// 那么可以假设数据读入完整,自动跳出循环
contents.append(content);
}
// 经典的输出语句,这里就不多说了
System.out.println(contents.toString());
// 服务器主动推送信息
dos.writeUTF("孙子别走,看爷爷打不死你.");
// 刷新缓冲区,防止粘包
dos.flush();
//断开连接
socket.close();
} catch (IOException e) {
//捕捉异常
e.printStackTrace();
}
}
}
客户端
package me.mxzf;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
/**
*
* @Title: TextSocket
* @Dscription: 客户端
* @author Deleter
* @date 2017年3月12日 上午9:15:08
* @version 1.0
*/
public class TextSocket {
public static void main(String[] args) {
try {
// 新建Socket实例(服务器地址,被监听端口)
Socket socket = new Socket(InetAddress.getLocalHost(), 1234);
// 用Data输入输出流封装流通道
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(
socket.getOutputStream());
// 客户端向服务器发送一条信息
// 通信前,客户端"必须先"向服务器发送消息
dos.writeUTF("爷爷,Mdzz");
// 定义一些变量用来接收,来自"服务器"的消息
String content;
StringBuilder contents = new StringBuilder();
// 当没有消息来之前,readUTF()一直处于阻塞状态
while ((content = dis.readUTF()) != null) {
// 一开始readUTF()是阻塞的,直到有数据来便开始读入
// 如果readUTF()读到了流的尾部也就是null
// 那么可以假设数据读入完整,自动跳出循环
contents.append(content);
break;
}
//依然是,输出语句
System.out.println(contents);
//断开连接
socket.close();
} catch (IOException e) {
//捕捉异常
e.printStackTrace();
}
}
}
**注意:
1、先运行服务端,在运行客户端
2、客户端一定要先发送消息,很多孩纸都闷在这步,不晓得哪里错了,就是没有用,也不报错.**