Java socket

204 阅读4分钟

service

package no;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class Server {
	
	public static void main(String[] args) {
		try {
			  //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
			  ServerSocket mServerSocket = new ServerSocket(30012);
			  System.out.println("~~~服务端已就绪,等待客户端接入~,服务端ip地址: " + get_ip());
			  Socket socket;
			  //2.调用accept()等待客户端连接
			  socket = mServerSocket.accept();
			  //接受信息的线程
			  //Receive_file_client(socket);
		      new Thread(new Runnable() {
				
				@Override
				public void run() {
					try {
						InputStream is=null;
					    InputStreamReader isr=null;
					    BufferedReader br=null;
					    //字节输入流
						is = socket.getInputStream();  
						//将字节流转为字符流
						isr = new InputStreamReader(is,"UTF-8");
						//为输入流添加缓冲
						br = new BufferedReader(isr);
						
						String info = null;
						while((info=br.readLine())!=null)//循环读取客户端的信息
					    {	
							System.out.println("客户端发送过来的信息:" + info);
							if(info.equals("bye"))
						      {
						    	  break;
						      }
					    }
						socket.shutdownInput();
					} catch (Exception e) {
						System.out.println(e.toString());
					}
				}
			}).start();
		      //发送信息的线程
		      new Thread(new Runnable() {
				
				@Override
				public void run() {
					try {
						BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
						//字节流
						OutputStream out = socket.getOutputStream();	
						//OutputStreamWriter()是从字符流到字节流的桥接	字节流->字符流
						OutputStreamWriter outw = new OutputStreamWriter(out,"utf-8");	
						//字符添加缓冲缓冲输出流
						BufferedWriter br = new BufferedWriter(outw);
						PrintWriter pw = new PrintWriter(br,true);
					      while(true)
					      {
					    	  System.out.print("请输入向客户端要发的东西:");					
						      String str = bufferedReader.readLine();
						      
						      //给服务端发送消息
						      pw.println(str);
						      if(str.equals("bye"))
						      {
						    	  break;
						      }
					      }
					      socket.shutdownOutput();
					} catch (Exception e) {
						// TODO: handle exception
					}				
				}
			}).start();
		    } catch (IOException e) {
		      e.printStackTrace();
		    }
	}
	public static String get_ip() throws UnknownHostException {
		InetAddress address = InetAddress.getLocalHost();
        return address.getHostAddress();	//返回ip地址
	}
	public static void Receive_file_client(Socket socket) { //
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					System.out.println("开始接受");
					InputStream is = socket.getInputStream();
					File file = new File("D:\\3\\1.pdf");
					if(!file.exists()) file.createNewFile();
					RandomAccessFile fileoutstream = new RandomAccessFile(file, "rwd");   
					fileoutstream.seek(0);
					byte[] buffer = new byte[1024];  
	                int len = -1;  
	                int length = 0; 
	                while((len=is.read(buffer))!=-1)
	                {
	                	fileoutstream.write(buffer,0,len);
	                	length+=len;
	                }
	                fileoutstream.close();
	                is.close();
	                socket.close();
	                
				} catch (Exception e) {
					System.out.println(e.toString());
				}
			}
		}).start();
	}

}

客户端

package no;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.text.WrappedPlainView;

public class ClientSocket {

	public static void main(String[] args) throws IOException{
		      Socket socket = new Socket("192.168.43.51", 30012);
		      new Thread(new Runnable() {
					
					@Override
					public void run() {
						try {
							InputStream is=null;
						    InputStreamReader isr=null;
						    BufferedReader br=null;
						    
							is = socket.getInputStream();     	//获取输入流
							isr = new InputStreamReader(is,"UTF-8");
							br = new BufferedReader(isr);
							
							String info = null;
							while((info=br.readLine())!=null)//循环读取客户端的信息
						    {	
								System.out.println("服务端发送过来的信息:" + info);
								if(info.equals("bye"))
							      {
							    	  break;
							      }
						    }
							socket.shutdownInput();
						} catch (Exception e) {
							System.out.println("run 接受"+e.toString());
						}
					}
				}).start();
			      //发送信息的线程
			      new Thread(new Runnable() {
					
					@Override
					public void run() {
						try {
							BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
						    PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
						      while(true)
						      {
						    	  System.out.print("请输入向服务端要发的东西:");					
							      String str = bufferedReader.readLine();
							      //给服务端发送消息
							      pw.println(str);
							      if(str.equals("bye"))
							      {
							    	  break;
							      }
						      }
						      socket.shutdownOutput();
						} catch (Exception e) {
							// TODO: handle exception
						}				
					}
				}).start();
		    
		   
	}

}

service 多线程

package no;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class Server {
	
	public static void main(String[] args) {
		try {
			  //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
			  ServerSocket mServerSocket = new ServerSocket(30012);
			  System.out.println("~~~服务端已就绪,等待客户端接入~,服务端ip地址: " + get_ip());
			  Socket socket;
			  //2.调用accept()等待客户端连接
			  socket = mServerSocket.accept();
			  //接受信息的线程
			  //Receive_file_client(socket);
		      new Thread(new Runnable() {
				
				@Override
				public void run() {
					try {
						InputStream is=null;
					    InputStreamReader isr=null;
					    BufferedReader br=null;
					    //字节输入流
						is = socket.getInputStream();  
						//将字节流转为字符流
						isr = new InputStreamReader(is,"UTF-8");
						//为输入流添加缓冲
						br = new BufferedReader(isr);
						
						String info = null;
						while((info=br.readLine())!=null)//循环读取客户端的信息
					    {	
							System.out.println("客户端发送过来的信息:" + info);
							if(info.equals("bye"))
						      {
						    	  break;
						      }
					    }
						socket.shutdownInput();
					} catch (Exception e) {
						System.out.println(e.toString());
					}
				}
			}).start();
		      //发送信息的线程
		      new Thread(new Runnable() {
				
				@Override
				public void run() {
					try {
						BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
						//字节流
						OutputStream out = socket.getOutputStream();	
						//OutputStreamWriter()是从字符流到字节流的桥接	字节流->字符流
						OutputStreamWriter outw = new OutputStreamWriter(out,"utf-8");	
						//字符添加缓冲缓冲输出流
						BufferedWriter br = new BufferedWriter(outw);
						PrintWriter pw = new PrintWriter(br,true);
					      while(true)
					      {
					    	  System.out.print("请输入向客户端要发的东西:");					
						      String str = bufferedReader.readLine();
						      
						      //给服务端发送消息
						      pw.println(str);
						      if(str.equals("bye"))
						      {
						    	  break;
						      }
					      }
					      socket.shutdownOutput();
					} catch (Exception e) {
						// TODO: handle exception
					}				
				}
			}).start();
		    } catch (IOException e) {
		      e.printStackTrace();
		    }
	}
	public static String get_ip() throws UnknownHostException {
		InetAddress address = InetAddress.getLocalHost();
        return address.getHostAddress();	//返回ip地址
	}
	public static void Receive_file_client(Socket socket) { //
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					System.out.println("开始接受");
					InputStream is = socket.getInputStream();
					File file = new File("D:\\3\\1.pdf");
					if(!file.exists()) file.createNewFile();
					RandomAccessFile fileoutstream = new RandomAccessFile(file, "rwd");   
					fileoutstream.seek(0);
					byte[] buffer = new byte[1024];  
	                int len = -1;  
	                int length = 0; 
	                while((len=is.read(buffer))!=-1)
	                {
	                	fileoutstream.write(buffer,0,len);
	                	length+=len;
	                }
	                fileoutstream.close();
	                is.close();
	                socket.close();
	                
				} catch (Exception e) {
					System.out.println(e.toString());
				}
			}
		}).start();
	}

}

socket with Android

package no;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class Service_with_android {

	public static void main(String[] args) {
		try {
			//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
			  ServerSocket mServerSocket = new ServerSocket(30011);
			  System.out.println("~~~服务端已就绪,等待客户端接入~,服务端ip地址: " + get_ip());
			  Socket socket;
			//2.调用accept()等待客户端连接
			  while(true)
			  {
				  socket = mServerSocket.accept();
				  
				  InputStream is=null;
			      InputStreamReader isr=null;
			      BufferedReader br=null;
			      
			      is = socket.getInputStream();     	//获取输入流
				  isr = new InputStreamReader(is,"UTF-8");
				  br = new BufferedReader(isr);
				  
				  String info = null;
				  int flag = 1;
				  while((info=br.readLine())!=null)//循环读取客户端的信息
			      {	
					  System.out.println("客户端发送过来的信息:" + info);
					  if(info.equals("bye"))
					  {
						  flag = 0;
					  }
			      }	
				  if(flag==0) break;
			  }
		    } catch (IOException e) {
		      e.printStackTrace();
		    }
	}
	public static String get_ip() throws UnknownHostException {
		InetAddress address = InetAddress.getLocalHost();
        return address.getHostAddress();	//返回ip地址
	}

}