代碼分享:
1.多個用戶訪問一個服務器
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class ClientTest {
public static void main(String[] args) {
Socket socket2 = null;
//鍵盤輸入流
InputStreamReader isr = null;
BufferedReader bfr = null;
//網絡輸出流
OutputStreamWriter osw = null;
BufferedWriter bfw = null;
try {
socket2 = new Socket("127.0.0.1", 9999);
isr = new InputStreamReader(System.in);
bfr = new BufferedReader(isr);
osw = new OutputStreamWriter(socket2.getOutputStream());
bfw = new BufferedWriter(osw);
String string = bfr.readLine();
while (string != null) {
bfw.write(string);
bfw.newLine();
bfw.flush();
string = bfr.readLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bfw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
bfr.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
socket2.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
class ServerThread implements Runnable {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
InputStreamReader isr = null; //網絡輸入流
BufferedReader bfr = null;
@Override
public void run() {
try {
isr = new InputStreamReader(socket.getInputStream());
bfr = new BufferedReader(isr);
String string = bfr.readLine();
while (string != null) {
System.out.println(string);
string = bfr.readLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bfr.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
socket.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
public class ServerTest {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
while (true) {
try {
server = new ServerSocket(9999);
System.out.println("我是服務器,正在監視.....");
socket = server.accept();
Runnable r = new ServerThread(socket);
Thread t = new Thread(r);
t.start();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
server.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
}
2.服務器給用戶傳文件
import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class ClientTest2 {
public static void main(String[] args) {
Socket socket = null;
BufferedInputStream bis = null; //網絡輸入流
FileOutputStream fos = null; //文件輸出流
BufferedWriter bfw = null; //網絡輸出流
try {
socket = new Socket("localhost", 8888);
bis = new BufferedInputStream(socket.getInputStream());
fos = new FileOutputStream("機器貓2.png");
bfw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
byte[] buf = new byte[8192];
int realCount = bis.read(buf);
while(realCount != -1) {
fos.write(buf, 0, realCount);
fos.flush(); //每次寫完一定要flush不然文件可能差些東西
realCount = bis.read(buf);
}
bfw.write("接收成功,並保存");
bfw.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
bis.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
bfw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
socket.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTest2 {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
FileInputStream fis = null; //文件輸入流
BufferedOutputStream bos = null; //網絡輸出流
BufferedReader isr = null; //網絡輸入流
try {
server = new ServerSocket(8888);
socket = server.accept();
fis = new FileInputStream("機器貓.png");
bos = new BufferedOutputStream(socket.getOutputStream());
isr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
byte[] buf = new byte[8192];
int realCount = fis.read(buf);
while (realCount != -1) {
bos.write(buf, 0, realCount);
bos.flush(); //每次寫完一定要flush,不然東西差點,還有兩邊都要flush
realCount = fis.read(buf);
}
socket.shutdownOutput();
String string = isr.readLine();
System.out.println(string);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bos.close();
} catch (Exception e2) {
}
try {
fis.close();
} catch (Exception e2) {
}
try {
isr.close();
} catch (Exception e2) {
}
try {
socket.close();
} catch (Exception e2) {
}
try {
server.close();
} catch (Exception e2) {
}
}
}
}
3.簡單的用戶/服務器
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import org.junit.Test;
public class NetTest {
@Test
public void Server() {
ServerSocket server = null;
Socket socket1 = null;
//輸出流
OutputStream os = null;
OutputStreamWriter osw = null;
BufferedWriter bfw = null;
//輸入流
InputStream is = null;
InputStreamReader isr = null;
BufferedReader bfr = null;
try {
server = new ServerSocket(7878);
socket1 = server.accept();
os = socket1.getOutputStream();
osw = new OutputStreamWriter(os, "UTF8");
bfw = new BufferedWriter(osw);
bfw.write("abcde");
bfw.newLine();
bfw.flush();
is = socket1.getInputStream();
isr = new InputStreamReader(is, "UTF8");
bfr = new BufferedReader(isr);
String string = bfr.readLine();
System.out.println(string);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bfr.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
bfw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
socket1.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
server.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
@Test
public void Client() {
Socket socket2 = null;
//輸出流
OutputStream os = null;
OutputStreamWriter osw = null;
BufferedWriter bfw = null;
//輸入流
InputStream is = null;
InputStreamReader isr = null;
BufferedReader bfr = null;
try {
socket2 = new Socket("127.0.0.1", 7878);
is = socket2.getInputStream();
isr = new InputStreamReader(is, "UTF8");
bfr = new BufferedReader(isr);
String string = bfr.readLine();
System.out.println(string);
os = socket2.getOutputStream();
osw = new OutputStreamWriter(os, "UTF8");
bfw = new BufferedWriter(osw);
StringBuilder sb = new StringBuilder(string);
sb.reverse();
bfw.write(new String(sb));
bfw.newLine();
bfw.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bfr.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
bfw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
try {
socket2.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}