一、網絡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();
}
}
}
客戶端
package com.imooc.netty.ch2;
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();
}
}
}
二、網絡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();
}
}