练习(第一天)
最近因为要编写实验室的服务器,所以把之前Java的网络编程部分重新捡起来练习一下,也算是复习一下socket模块
以下是代码
##server
package com.icss.ch01;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static String line;
public static DataInputStream is;
public static DataOutputStream os;
public static BufferedReader sin ;
public static void main(String[] args) throws IOException {
send1 se1=new send1();
read1 re1 =new read1();
ServerSocket server = null;
try {
server = new ServerSocket(4700);
System.out.println("服务器启动成功");
} catch (IOException e) {
System.out.println("服务器启动失败");
}
Socket socket = null;
try {
socket = server.accept();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
is = new DataInputStream(socket.getInputStream());
os = new DataOutputStream(socket.getOutputStream());
sin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("client"+is.readUTF());
line = sin.readLine();
se1.start();
re1.start();
os.close();
is.close();
socket.close();
}
}
##client
package com.icss.ch01;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static String readline;
static Socket socket ;
static BufferedReader sin;
static PrintWriter os ;
static DataInputStream is ;
public static void main(String[] args) throws IOException {
send sen = new send();
read r = new read();
socket = new Socket("127.0.0.1",4700);
sin = new BufferedReader(new InputStreamReader(System.in));
os = new PrintWriter(socket.getOutputStream());
is = new DataInputStream(socket.getInputStream());
readline = sin.readLine();
// os.println(readline);
// os.flush();
// readline = sin.readLine();
sen.start();
r.start();
os.close();
is.close();
socket.close();
}
}
##send
package com.icss.ch01;
public class send extends Thread {
public void run() {
while(!Client.readline.equals("exit")) {
Client.os.println(Client.readline);
Client.os.flush();
}
}
}
##read
package com.icss.ch01;
import java.io.IOException;
public class read extends Thread {
public void run() {
while(!Client.readline.equals("exit")) {
try {
System.out.println("server"+Client.is.readUTF());
Client.readline = Client.sin.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
##send1
package com.icss.ch01;
import java.io.IOException;
public class send1 extends Thread {
public void run() {
while(!server.line.equals("exit")) {
try {
server.os.writeUTF(server.line);
server.os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
##read1
package com.icss.ch01;
import java.io.IOException;
public class read1 extends Thread {
public void run() {
while(!server.line.equals("exit")) {
try {
System.out.println("Client"+server.is.readUTF());
server.line = server.sin.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
server是服务器端,client是客户端,send,read,send1,read1是我做的子线程,目的是为了实现读写操作不阻塞。