网络编程中有两个主要的问题
一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。
服务端:
package Server; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) { try { //服务端的套接字 需要一个端口号 ServerSocket ss=new ServerSocket(2020); Socket s=ss.accept();//从服务端套接字或得到的,要等待客户端连接,阻塞式 Reader in =new InputStreamReader(s.getInputStream());//有流获取信息 int c; //一直读 直到有值 while ((c=in.read())!=-1) { System.out.write(c); } s.close();//要注意关闭 ss.close(); }catch(IOException e) { e.printStackTrace(); } } }
客户端:
package Server; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class MyClient { public static void main(String[] args) { try { //本机 或则填ip,打开防火墙 Socket s =new Socket("localhost",2020); Writer out=new OutputStreamWriter(s.getOutputStream()); Scanner input = new Scanner(System.in); String a=input.nextLine()+"\n"; out.write("Hello,Java netWork programming!\n"); out.write(a); out.close(); input.close(); s.close(); } catch(UnknownHostException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }
运行时,先启动服务器端,在运行客户端,观察console
在客户端输入Hello world
两边都停止了运行,输出结果相同