①服务器程序创建一个ServerSocket套接字,调用accept()方法等待客户机来连接
②客户端程序创建一个Socket,请求与服务器建立连接
③服务器接收客户机的连接请求,同时创建一个新的Socket与客户建立连接.服务器继续等待新的连接请求.
try {
//不能直接new一个对象,用getLocalHost()取得对象
InetAddress address=InetAddress.getLocalHost();
System.out.println(address.getHostName());
System.out.println(address.getHostAddress());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
运行时先运行服务器代码,在运行客户端代码
在eclipse下面窗口可查看两个控制台的信息
//服务器代码
public static void main(String[] args) {
try {
System.out.println("服务器运转");
ServerSocket server=new ServerSocket(8080);
Socket socket=server.accept();//开启服务,等待连接
InputStream is=socket.getInputStream();//获得socket输入流
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String str=br.readLine();
System.out.println("在等待"+str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//客户端代码
public static void main(String[] args) {
try {
Socket socket=new Socket("192.168.0.191",8080);
System.out.println("客户端启动");
OutputStream os=socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
bw.write("hello\n");
bw.flush();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//服务器代码
public static void main(String[] args) {
try {
System.out.println("服务器运转");
ServerSocket server=new ServerSocket(8080);
Socket socket=server.accept();
InputStream is=socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
OutputStream os=socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
BufferedReader br=new BufferedReader(isr);
Scanner input=new Scanner(System.in);
while(true){
String str=br.readLine();//等待客户端
System.out.println("在等待"+str);
String s=input.next();
bw.write(s+"\n");
bw.flush();
String str1=br.readLine();//等待客户端
System.out.println("在等待"+str1);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//客户端代码
public static void main(String[] args) {
try {
Socket socket=new Socket("192.168.0.191",8080);
InputStream is=socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
OutputStream os=socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
Scanner input=new Scanner(System.in);
while(true){
String s=input.next();
bw.write(s+"\n");
bw.flush();
String sr=br.readLine();
System.out.println("服务端返回"+sr);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//*******************读线程*********************
public class MyRead implements Runnable {
private Socket socket;
public MyRead(Socket socket) {// 构造器
this.socket = socket;
}
// @Override
// public void run() {
// BufferedReader br = null;
// try {
// InputStream is = socket.getInputStream();
// br = new BufferedReader(new InputStreamReader(is));
// while (true) {
//
// String line = br.readLine();
// System.out.println("说了:"+"\t" + line);
// } }catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// }
// }
@Override
public void run() {
BufferedReader br = null;
try {
InputStream is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true) {
try {
String line = br.readLine();
System.out.println("说了:" + "\t" + line);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//******************写线程****************
public class MyWrite implements Runnable {
private Socket socket;
public MyWrite(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedWriter bw = null;
try {
OutputStream os = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(os));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Scanner input = new Scanner(System.in);
while (true) {
String words = input.next();
try {
bw.write(words + "\n");
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//*****************服务器端****************
public class MyServer {
public static void main(String[] args) {
try {
ServerSocket server= new ServerSocket(8080);
System.out.println("服务器启动");
Socket socket=server.accept();//等待客户端连接进入
System.out.println("有客户端进来");
MyRead mr=new MyRead(socket);
MyWrite mw=new MyWrite(socket);
Thread t = new Thread(mr);
Thread t1= new Thread(mw);
t.start();
t1.start();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//*******************客户端*******************
public class MyClient {
public static void main(String[] args) {
try {
System.out.println("客户端连接");
Socket socket = new Socket("192.168.0.191", 8080);
// Thread read = new Thread(new MyRead(socket));
// Thread write = new Thread(new MyWrite(socket));
// read.start();
// write.start();
MyRead mr=new MyRead(socket);
MyWrite mw=new MyWrite(socket);
Thread t = new Thread(mr);
Thread t1= new Thread(mw);
t.start();
t1.start();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}