初学——网络编程
一、iP
1.Ip地址
IP地址有唯一的网络上的每一台地计算机,ip地址有死歌八位二进制组成.每个字段不能超过255
IP地址=网络地址(表示计算机或者网络设备所在的万股单)+主机地址(表示特定主机或网络设备)
查看主机的IP地址在cmd中输入config查看与目标主机测试网络是否同畅用ping +目标IP主机
2.Dns域名解析
网络服务器通常指较高的计算能力,能够听用户服务功能的计算,网络服务器可分为(邮件服务器和web服务器) .
3.网络通信协议
为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
应用层:HTTP(网络协议) FTP(文件协议) TFTP SMTP SNMP DNS
传输层: TCP UDP
网络层:ICMP IGMP IP ARP RARP
数据链路层:
物理层:由底层网络第一的协议
二、Socke
Socket的底层机制复杂,Java平台提供了一些简单的API,可以更简单有效的使用Socket开发而无需了解底层机制。通信链路的端点就被称为“套接字”(英文名Socket) 是提供给应用程序的接口
1.socket的分类
流是套接字:面向连接提供可靠的数据传输服务
数据报是套接字:无连接服务更加高效率
2. Socket的传输字符流
创建server类
package dome1; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; //服务器端 public class Service { public static void main(String[] args) throws Exception { /* * 接受客户端请求 */ //创建一个服务器的socket ServerSocket serverSocket=new ServerSocket(50001); //使用accept方法监听service的链接 Socket socket = serverSocket.accept(); //通过输入流获得用户请求 InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); String str; while ((str=br.readLine())!=null) { System.out.println("客户端说:"+str); } /* * 给客户端相应 */ OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); String hui="欢迎你"; bw.write(hui); //关闭流 br.close(); is.close(); socket.close(); serverSocket.close(); } }
创建客户端输出
package dome1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) throws Exception { Socket socket=new Socket("localhost", 50001); String info="用户名:tom;密码:123"; OutputStream os=socket.getOutputStream(); byte [] b=info.getBytes(); //接受服务器的相应 socket.shutdownOutput(); InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); String re; os.write(b); os.close(); socket.close(); } }
3.Socket基于多线程传输对象
创建User类并且封装
package dome3; import java.io.Serializable; public class User implements Serializable{ private String name; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public User(String name, String pwd) { super(); this.name = name; this.pwd = pwd; } public User() { super(); } }
创建客户端一
package dome3; import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; public class UserClient1 { public static void main(String[] args) { try { //链接端口 Socket socket=new Socket("localhost",50002); //实例化对象 User user=new User("王五", "123"); //封装对象 ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream()); //传输对象 oos.writeObject(user); //关闭流 oos.close(); socket.close(); //捕获异常 } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
创建客户端二
package dome3; import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; public class UserClient2 { public static void main(String[] args) { try { //链接端口 Socket socket=new Socket("localhost",50002); //实例化对象 User user=new User("李四", "123"); //封装对象 ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream()); //传输对象 oos.writeObject(user); //关闭流 oos.close(); socket.close(); //捕获异常 } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
创建线程类
package dome3; import java.io.IOException; import java.io.ObjectInputStream; import java.net.Socket; public class UserThread extends Thread { private Socket socket; public UserThread(Socket socket) { this.socket=socket; } public void run() { //创建对象的传输流 try { ObjectInputStream ois; ois = new ObjectInputStream(socket.getInputStream()); //将受到的流转换成对象 User user2; user2 = (User)ois.readObject(); System.out.println("客户端说:"+user2.getName()+user2.getPwd()); //关闭流 socket.close(); ois.close(); socket.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
创建服务器类
package dome3; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; import com.sun.corba.se.spi.orbutil.fsm.InputImpl; public class UserService { public static void main(String[] args) throws Exception { //创建ServerSocket的对象 ServerSocket serverSocket=new ServerSocket(50002); //监听与服务类的链接 while (true) { Socket socket=serverSocket.accept(); //创建线程与每个客户端相应 UserThread userThread=new UserThread(socket); userThread.start(); } } }
运行结果: