java Socket 简单服务端与客户端代码
前言
本文实现的是服务器与客户端建立连接,客户端可以向服务器发送消息,服务器可以向客户端推送消息。
一:编写服务端
package kf;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 服务端
* @author 刘正
*
*/
public class servernettext {
public static String _pattern = "yyyy-MM-dd HH:mm:ss SSS";
public static SimpleDateFormat format = new SimpleDateFormat(_pattern);
// 设置超时间
public static int _sec = 0;
public static void main(String[] args) {
try {
//监听指定的端口
ServerSocket server=new ServerSocket(9999);
while (true) {
//建立连接
Socket soket=server.accept();
System.out.println(format.format(new Date()));
System.out.println("建立了链接
");
//接收客户端消息(从socket中获取输入流,并建立缓冲区进行读取)
InputStream din=soket.getInputStream();
System.out.println("客户端ip地址是:"+soket.getInetAddress());
System.out.println("客户端端口号是:"+soket.getPort());
System.out.println("本地端口号是:"+soket.getLocalPort());
byte[] outPut=new byte[4096];
while (din.read(outPut)>0) {
//注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
String result=new String(outPut);
System.out.println("客户端的消息是:"+result);
}
//给客户端发送消息
OutputStream dout=soket.getOutputStream();
dout.write("已收到你发来的消息!!".getBytes());
din.close();
dout.close();
soket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
二:编写客户端
package kf;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
/**
* 客户端
*
* @author 刘正
*
*/
public class clienttextnet {
public static String _pattern = "yyyy-MM-dd HH:mm:ss SSS";
public static SimpleDateFormat format = new SimpleDateFormat(_pattern);
public static void main(String[] args) {
try {
while (true) {
// 与服务端建立连接
Socket socket = new Socket("127.0.0.1", 9999);
// 获得输出流,给服务端发送信息
OutputStream dout = socket.getOutputStream();
String str = "数据传输------";
dout.write(str.getBytes());
// 通过shutdownOutput高速服务器已经发送完数据,后续只能接受数据
socket.shutdownOutput();
// 接收服务端发送的消息
InputStream din = socket.getInputStream();
byte[] outPut = new byte[4096];
while (din.read(outPut) > 0) {
String result = new String(outPut);
System.out.println("服务端反回的的消息是:" + result);
}
din.close();
dout.close();
socket.close();
Thread.sleep(3000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
上一篇:
IDEA上Java项目控制台中文乱码
