黑马程序员----网络编程

                                                      ------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


网络编程

网络编程的三要素:

       一、Ip地址:

              是网络中的设备标识

              不易记忆,可用主机名

              本地回环地址:127.0.0.1,主机名:localhost

       二、端口号:

              用于标识进程的逻辑地址,不同进程的标识,有效端口0-65535,其中0-1024位系统使用

       三、传输协议

              通讯的规则,常见协议TCP、UDP。

描述IP地址的类为:

InetAddress:

       无构造函数,通过静态方法getLocalHost()获取实例:InetAddress i=InetAddress.getLocalHost();

       重要方法:

                 static InetAddress getByName(String host):获取指定主机的IP和主机名。

                static InetAddress[] getAllByName(String host):在给定主机名的情况下,返回IP地址所组成的数组。返回对象不唯一时,用此方法。

                String getHostAddress():返回IP地址字符串文本形式,以IP地址为主。

                String getHostName():返回IP地址主机名。

package wangluo.packag;
import java.net.*;
public class InetAddressDemo {
	public static void main(String[] args) throws Exception{
		
		InetAddress i=InetAddress.getByName("www.baidu.com");
		String ip=i.getHostAddress();
		String name=i.getHostName();
		sop(ip);
		sop(name);
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}

TCP和UDP

       UDP:

              将数据的源和目的封装到数据包中,不需要建立连接

              每个数据包的大小限制在64k内

              因无连接,不是不可靠协议

              不需要建立连接,传输速度快

       TCP:

              建立连接,形成传输通道

              在连接中进行大数据量传输

              通过三方握手完成连接,是可靠连接

              必须建立连接,效率会稍低


Socket

        Socket就是为网络服务提供的一种机制。

        通信的两端都有Socket

        网络通信其实就是Socket的通信

        数据在两个Socket通过IO传输


UDP传输

                1.利用DatagramSocket与DatagramPacket

                2.建立发送端和接收端

                3.将数据封包

                4.调用Socket的发送接收方法传输数据

                5.关闭Socket

UDP传输发送端:

 

package xiaobing.net;
/*
 * 需求:通过UPD将一段文字发送出去
 * 思路:
 * 1.建立Udp socket服务
 * 2.将数据封包
 * 3。通过socket服务的发送发送数据
 * 4.关闭资源
 */
import java.net.*;
public class UdpSend {
	public static void main(String[] args)throws Exception
	{
		//1,创建udp服务,通过DatagramSocket对象
		DatagramSocket ds=new DatagramSocket();
		//2.确定数据并封包,DatagramPacket对象
		byte[] buf="upd fa song chu qu".getBytes();
		DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),300001);
		
		//3通过socket方法发出数据
		ds.send(dp);
		//4.关闭资源
		ds.close();
	}
}

接收端:


package xiaobing.net;
import java.net.*;
/*
 * 需求:建立一个引用程序,接收并处理upd协议数据
 * 思路:
 * 1.定义udpsocket服务
 * 2.定义数据包(无数据)用于存储接受到的字节数据,因为数据包中有方法提取不同数据信息
 * 3.通过socket的receive方法将受到的数据存入包中
 * 4.通过数据包对象的特有功能,将数据去除
 * 5.关闭资源
 */
public class UdpEece {

	public static void main(String[] args)throws Exception
	{
		// TODO Auto-generated method stub
		//1.建立udp ocket
		DatagramSocket ds=new DatagramSocket(200001);
		//2。定义数据包
		byte[] buf=new byte[1024];
		DatagramPacket dp=new DatagramPacket(buf,buf.length);
		//3.调用receive方法接收数据
		ds.receive(dp);
		//4通过数据包的方法获取具体数据
		String ip=dp.getAddress().getHostAddress();//获取ip
		String data=new String(dp.getData(),0,dp.getLength());//获取数据
		int port=dp.getPort();//获取端口
		System.out.println(ip+".."+data+".."+port);
		//5.关闭资源
		ds.close();
	}

}


Tcp传输


                1.建立Socket和ServerSocket客户端和服务端

                2.建立连接佳偶同伙Socket的I流进行数据的传输

                3.关闭socket。

TCP传输客户端:


package xiaobing.net;
import java.net.*;
import java.io.*;
/*
 * 1.tcp分为客户端和服务端
 * 2.客户端对象时Socket
 *  服务端是ServerSocket
 *  
 */
/*需求:给服务端发送一个文本数据
 * 客户端建立:
 * 该对象一建立就可以去连接指定主机
 * 步骤:
 * 1,创建sockt服务,指定主机和端口
 * 2.获取输出流发出数据
 * 3.关闭资源
 */
public class TcpClient {
	public static void main(String[] args)throws Exception
	{
		//1.创建socket
		Socket s=new Socket("192.168.1.100",30002);
		//为了发送数据,应获取socket的输出流
		OutputStream out=s.getOutputStream();
		out.write("tcp ni hao".getBytes());
		s.close();
    }
}

  服务端:

package xiaobing.net;
import java.io.*;
import java.net.*;
/*
 * 需求:定义端点接收数据并打印
 * 服务端:
 * 1.建立服务端的socket服务,ServerSocket()
 * 2.获取连接过来的客户端对象,通过accept方法,这个方法是阻塞式的,没有连接就会等
 * 3.客户端如果发来数据,服务端就要获取到客户端的读取流得到数据
 * 4.关闭资源(可选)
 */
public class TcpServerDemo {

	public static void main(String[] args)throws Exception {
		// TODO Auto-generated method stub
		//建立socket服务,并监听端口
		ServerSocket ss=new ServerSocket(30002);
		//连接链接过来的客户端
		Socket s=ss.accept();
		String ip=s.getInetAddress().getHostAddress();
		System.out.println("连接过来的是"+ip);
		//获取客户端发来的数据,先获取客户端的发送流
		InputStream in=s.getInputStream();
		//读取数据
		byte[] buf=new byte[1024];
		int len=in.read(buf);
		System.out.println(new String(buf,0,len));
		

	}

}


实现客户端和服务端:

package xiaobing.net;
import java.net.*;
import java.io.*;
/*演示客户端和服务端的互访
 * 需求:客户端发送数据,服务端受到后,回馈信息给客户端
 * 
 */
/*
 * 客户端:
 * 1.建立socket服务,指定主机和接口
 * 2.获取输出流写入数据发送
 * 3.获取输入流,将服务端反馈的数据获取到并打印
 * 4.关闭资源
 */

public class TcpClilect2 {
	public static void main(String[] args)throws Exception
	{
		//建立socket
		Socket s=new Socket("192.168.1.100",20004);
		//获取输出流输出数据
		OutputStream out=s.getOutputStream();
		out.write("服务端,你好".getBytes());
		//获取写入流得到服务器反馈的信息
		InputStream in=s.getInputStream();
		byte[] buf=new byte[1024];
		int len=in.read(buf);
		System.out.println(new String(buf,1,len));
		
	}
}
public class TcpServer2 {
	public static void main(String[] args)throws Exception
	{
		//建立socket
		ServerSocket ss=new ServerSocket(20004);
		//连接连接过来的客户端
		Socket s=ss.accept();
		String ip=s.getInetAddress().getHostAddress();
		System.out.println(ip+"连过来了");
		//获取客户端的输出流得到数据
		InputStream out=s.getInputStream();
		byte[] buf=new byte[1024];
		int len=in.read(buf);
		System.out.println(new String(buf,1,len));
		//利用客户端的输出流回馈信息
		OutputStream out=s.getOutputStream();
		out.write("你也好".getBytes());
		
		
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值