java学习总结——第十八天

网络编程 Socket

Socket可以看成是两个程序进行通讯连接中的一个端口

主要还是代练习

客户机与服务机直接的通讯(Tcp)

服务机


/**
 * 服务器端程序
 * @author Administrator
 *
 */
public class Server {

//1、定义资源
ServerSocket serverSocket; //服务器端ServerSocket
private int port=8989;

//2、初始化,启动服务器
public Server(){
try {
serverSocket=new ServerSocket(port); //实例化ServerSocket

System.out.println("服务器启动成功!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("服务器启动失败!");
}
}
//3、处理业务
public void service(){
while(true){
Socket socket=null;
try {
socket=serverSocket.accept();//接收客户的链接请求,返回Socket对象,阻塞

//分配给工作线程
new HandlerThread(socket).start();



//接收器(输入流)
// BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));

// //1、字节流
// InputStream is=socket.getInputStream();
//
// //2、字节流——>字符流
// InputStreamReader isr=new InputStreamReader(is);
//
// //3、字符流——>缓冲流
// BufferedReader br=new BufferedReader(isr);


//发送器(输出流)
// PrintWriter pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);


// //1、字节流
// OutputStream os=socket.getOutputStream();
//
// //2、字节流——>字符流
// OutputStreamWriter osw=new OutputStreamWriter(os);
//
// //3、字符流——>PrintWriter
// PrintWriter pw=new PrintWriter(osw,true);




// String msg=null;
//读取客户的发生的信息
// while((msg=br.readLine())!=null){
// if(msg.equals("quit")||msg.equals("MagicExit")){
// break;
// }
// System.out.println(clientAdd+":"+clientPort+"> "+msg);

//写出发送信息
//回声
// pw.println("you said: "+msg);  //返回输出给客户端

//聊天发送信息
// Scanner in=new Scanner(System.in);
// msg=in.nextLine();
// pw.println(msg);  //返回输出给客户端
//
// }


// if(msg.equals("MagicExit")){
// break;
// }

} catch (IOException e) {
e.printStackTrace();
}
}

}

public static void main(String[] args) {
new Server().service();
}
}

客户机

public class Client {

//1、资源
Socket socket;
String host="127.0.0.1"; //127.0.0.1 localhost
int port=8889;

//2、连接到服务器
public Client() {
try {
socket=new Socket(host,port);

System.out.println("连接服务器成功!");
} catch (UnknownHostException e) {
e.printStackTrace();
System.out.println("主机无法找到!");
} catch (IOException e) {
e.printStackTrace();
System.out.println("连接服务器错误!");
}
}

//3、处理业务
public void send(){

try {

//发送器
PrintWriter pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
//接收器
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));


while(true){
Scanner in=new Scanner(System.in);
String msg=in.nextLine();

pw.println(msg);  //发送信息

if(msg.equals("quit")||msg.equals("MagicExit")){
break;
}

msg=br.readLine(); //接收服务器端返回的信息
System.out.println(msg);
}

} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}


}



public static void main(String[] args) {
new Client().send();
}


}

多线程处理 可以实现多个客户机连接一个服务机

public class HandlerThread extends Thread {

Socket socket;
BufferedReader br;
PrintWriter pw;

public HandlerThread(Socket socket) {
this.socket=socket;
}
/**
* 初始化
* @throws IOException
*/
public void init() throws IOException{
//接收器(输入流)
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//发送器(输出流)
pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);

}


@Override
public void run() {


try {
init();

//获得客户端连接信息(地址,端口)
String clientAdd=socket.getInetAddress().getHostAddress();
int clientPort=socket.getPort();
System.out.println("来自"+clientAdd+":"+clientPort+"的连接请求。");

String msg=null;
//读取客户的发生的信息
while((msg=br.readLine())!=null){
if(msg.equals("quit")||msg.equals("MagicExit")){
break;
}
System.out.println(clientAdd+":"+clientPort+"> "+msg);

//写出发送信息
//回声
pw.println("you said: "+msg);  //返回输出给客户端

//聊天发送信息
// Scanner in=new Scanner(System.in);
// msg=in.nextLine();
// pw.println(msg);  //返回输出给客户端
//
}

} catch (IOException e) {
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}



}

}

阅读更多
文章标签: java Socket
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭