黑马程序员——网络编程(Socket编程)下


1.UDP 网络编程操作

DatagramSocket数据套接字与DatagramPacket数据包
完成步骤:
建立发送端,接收端。
创建数据
建立数据包。
调用Socket的发送接收方法。
关闭Socket。
发送端与接收端是两个独立的运行程序。

代码案例

发送端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


public class Demo_Udpsend {
	public static void main(String[] args) throws IOException {
		//建立发送端
		DatagramSocket ds = new DatagramSocket();
		//创建数据
		String s = "我爱java";
		//建立数据包   需要字节数组   长度  目标地址   端口号
		//将字符串转换为字节数组
		byte[] bytes = s.getBytes();
		//获取数组长度
		int length =  bytes.length;
		//获取计算机名
		InetAddress Ip = InetAddress.getByName("192.168.31.174");
		//指定接口
		int port = 8824;
		 
		DatagramPacket dp = new DatagramPacket(bytes, length,Ip,port);
		//调用Socket的发送方法,发送数据包
		ds.send(dp);
		//关闭socaket
		ds.close();
	}

}
接收端

package it.cast;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Demo_UdpRceive {
	public static void main(String[] args) throws IOException {
				//建立指定端口的socket对象
				DatagramSocket ds = new DatagramSocket(8824);
				//创建数组	接收数据
				byte[] bytes = new byte[1024];
				//建立数据报包
				DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
				//调用Socket的接收
				ds.receive(dp);
				//解析数据
				 //获取地址对象
				 InetAddress address = dp.getAddress();
				 //获取地址ip
				 String hostAddress = address.getHostAddress();
				 //获取值
				 byte[] data = dp.getData();
				 //获取长度
				 int length = dp.getLength();
				 //解析后的数据
				 String rcevive = new String(data,0,length);
				 System.out.println("从"+hostAddress+"接收到的数据是:"+rcevive);
				//关闭socaket
			
				ds.close();
	}

}
2.TCP网络编程操作

完成步骤:
建立客户端和服务器端。
建立连接后,通过Socket中的IO流(Socket流)进行数据的传输。
(如果是服务器端,则需要添加一步操作:通过Socket服务获取Sokect再获取其当中的IO流)
关闭socket。
同样,客户端与服务器端是两个独立的应用程序。
注意:
服务器端开启后等待客户端访问,不应关闭。
一个服务器端对应多个客户端。
不同客户端间通信可以通过服务器端中转信息。

  发送端

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class tcp_kh {
public static void main(String[] args) throws IOException {
			//新建socaket对象
	 	Socket s = new Socket("192.168.137.141",60345);
	 	//获取socaket输出流
	 	OutputStream out = s.getOutputStream();
	 	//准备数据
	 	String st = "我会打dota";
	 	byte[] bytes = st.getBytes();
	 	//输出数据
	 	out.write(bytes);
	 	s.close();
	 }
}
输入端:

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class tcpserver {
	public static void main(String[] args) throws IOException {
		//确定端口的服务端socket
		ServerSocket ss = new ServerSocket(6663);
			//获取socket
		Socket socket = ss.accept();
		//获取输入流
		InputStream in = socket.getInputStream();
		//输入数据
		int len;
		byte[] bytes = new byte[1024];
		while((len= in.read(bytes))!=-1){
			System.out.println(new String(bytes,0,len));
		}
		//关闭流
		socket.close();
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值