一、网络IO TCP
服务端启动引导
public class ServerBoot {
private static final int PORT = 8000;
public static void main(String[] args) {
Server server = new Server(PORT);
/**start里面新建了一个线程用于接受客户端请求,
* 接收到客户端请求后又为每个请求创建work线程去处理逻辑*/
server.start();
}
}
服务端创建一个线程接受连接,收到连接后调用监听数据的模块
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private ServerSocket serverSocket;
public Server(int port) {
try {
this.serverSocket = new ServerSocket(port);
System.out.println("服务端启动成功,端口:" + port);
} catch (IOException exception) {
System.out.println("服务端启动失败");
}
}
public void start() {
new Thread(new Runnable() {
@Override
public void run() {
doStart();
}
}).start();
}
private void doStart() {
while (true) {
try {
/**accept是个阻塞方法 这个while(true)搭配accept()不断监听是否有客户端连接上来了*/
Socket client = serverSocket.accept();
/**start()中为每个连接新建了线程来监听该连接上是否有数据传过来了*/
new ClientHandler(client).start();
} catch (IOException e) {
System.out.println("服务端异常");
}
}
}
}
逻辑处理模块:为每个连接创建一个线程用于监听该连接上是否有数据过来
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class ClientHandler {
public static final int MAX_DATA_LEN = 1024;
private final Socket socket;
public ClientHandler(Socket socket) {
this.socket = socket;
}
public void start() {
System.out.println("新客户端接入");
new Thread(new Runnable() {
@Override
public void run() {
doStart();
}
}).start();
}
private void doStart() {
try {
InputStream inputStream = socket.getInputStream();
/**这个while(true)搭配inputStream.read不断地监听这个连接上是否有数据过来了*/
while (true) {
byte[] data = new byte[MAX_DATA_LEN];
int len;
while ((len = inputStream.read(data)) != -1) {
String message = new String(data, 0, len);
System.out.println("客户端传来消息: " + message);
socket.getOutputStream().write(data);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
import java.io.IOException;
import java.net.Socket;
public class Client {
private static final String HOST = "127.0.0.1";
private static final int PORT = 8000;
private static final int SLEEP_TIME = 5000;
public static void main(String[] args) throws IOException {
final Socket socket = new Socket(HOST, PORT);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("客户端启动成功!");
while (true) {
try {
String message = "hello world";
System.out.println("客户端发送数据: " + message);
socket.getOutputStream().write(message.getBytes());
} catch (Exception e) {
System.out.println("写数据出错!");
}
sleep();
}
}
}).start();
}
private static void sleep() {
try {
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
二、网络IO UDP
服务端
package com.sid.io;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPServer {
public static void main(String args[]){
try {
DatagramSocket serversocket=new DatagramSocket(7777);
byte[] data=new byte[1024];
DatagramPacket packet=new DatagramPacket(data,data.length);
System.out.println("服务器已启动......");
//阻塞
serversocket.receive(packet);
String s=new String(data,0,packet.getLength());
System.out.println("get client:"+s);
DatagramSocket clientsocket=new DatagramSocket();
String senddata="welcome to you visit ";
byte[] bytes=senddata.getBytes();
InetAddress ip=packet.getAddress();
int port=packet.getPort();
DatagramPacket p=new DatagramPacket(bytes,0,senddata.length(),ip,port);
clientsocket.send(p);
} catch (SocketException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
package com.sid.io;
import java.io.IOException;
import java.net.*;
public class UDPClient {
public static void main(String args[]){
try {
DatagramSocket clientsocket=new DatagramSocket();
String senddata="hello my name is zyw";
byte[] bytes=senddata.getBytes();
InetAddress ip=InetAddress.getByName("127.0.0.1");
DatagramPacket packet=new DatagramPacket(bytes,0,senddata.length(),ip,7777);
clientsocket.send(packet);
byte data[]=new byte[1024];
DatagramPacket packet1=new DatagramPacket(data,0,data.length);
clientsocket.receive(packet1);
String s=new String(data,0,packet1.getLength());
System.out.println("server say:"+s);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
三、本地文件IO
将键盘录入的数据保存到一个文件中,输入“over”时表示录入结束
public class FileIO {
public static void main(String[] args) throws IOException {
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw=new BufferedWriter(new FileWriter("readin.txt"));
String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line)) break;
bufw.write(line);
bufw.newLine();
}
bufw.close();
bufr.close();
}
}