幕布斯9176636
2019-02-07 23:58
import java.io.*;
import java.net.*;
import java.net.Socket;
import org.omg.CORBA.portable.InputStream;
/**基于TCP协议的服务器端
*
*/
public class Server {
public static void main(String[] args) {
// TODO 自动生成的方法存根
try {
ServerSocket server=new ServerSocket(7001);
//调用accept()方法侦听,等待客户端的链接
System.out.println("服务器已启动,等待客户端的连接");
Socket socket;
int count=0;
while(true) {
socket=server.accept();
ServerThread serverthread=new ServerThread(socket);
serverthread.start();
count++;
System.out.println("客户端的数量:"+count);
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
//客户端
public class Clien {
public static void main(String[] args) {
// TODO 自动生成的方法存根
try {
Socket socket=new Socket(InetAddress.getLocalHost()
,7001);
//获取输出流,用于想服务器端发送信息
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);//将字节输出流包装成打印流
pw.write("用户名:admin; 密码:123");
pw.flush();
socket.shutdownOutput();//关闭输出流
//获取输入流,读取服务端响应
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=null;
while((info=br.readLine())!=null) {
System.out.println("我是客户端,服务器说:"+info);
}
br.close();
is.close();
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
public class ServerThread extends Thread {
Socket socket;
public ServerThread(Socket soket) {
this.socket=socket;
}
public void run() {
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw = null;
InputStreamReader isr=null;
InputStream is=null;
try {
//获取输入流
//is=socket.getInputStream();
isr=new InputStreamReader(socket.getInputStream());
br=new BufferedReader(isr);
String info=null;
while((info=br.readLine())!=null) {
System.out.println("我是服务器,客户端说:"+info);
}
socket.shutdownInput();
//获取输出流。响应客户端
os=socket.getOutputStream();
pw=new PrintWriter(os);
pw.write("欢迎您");
pw.flush();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
//必须要执行的代码
//关闭资源
try {
if(pw!=null)
pw.close();
if(os!=null)
os.close();
if(br!=null)
br.close();
if(isr!=null)
isr.close();
//if(is!=null)
// is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
ServerThread类中 //获取输入流
import org.omg.CORBA.portable.InputStream;你要导入IO流的包;
客户端中,Socket socket=new Socket(InetAddress.getLocalHost(),7001);将InetAdress.getLocalHost()直接写成"IP"这种就行了,IP是你自己的IP地址。
另外是先启动服务端,如果服务端没有启动的话,启动客户端会报错
br.close();
is.close();
pw.close();
os.close();
socket.close(); 如果多个流连接在一起,直接关闭最终的流就可以了;br.close();os.close();socket.close();
Java Socket应用---通信是这样练成的
125013 学习 · 590 问题
相似问题
回答 3
回答 1