Socket:套接字 插座 插槽
说明socket既能发送又能接收
分为两点:
1 调试的时候可以使用start命令再开一个控制台窗口 保留了原来的设置 很方便
2 思路要清晰 发送方(设置位置信息 设置信息输入方式 打包 发送 关闭资源)
接收方(设置监听端口 设置接受信息的对象 显示接收到的信息)
/*
需求:
聊天s
*/
//有net的地方一般都有io
import java.io.*;
import java.net.*;
class UDPSend2
{
public static void main(String[] args) throws UnknownHostException, IOException
{
DatagramSocket ds = new DatagramSocket();
//键盘输入 背也要背下来
//其实就是用缓冲区读取默认系统输入 而系统输入是键盘 需要转换一次
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = bufr.readLine())!=null)
{//设定结束标记
if ("886".equals(line))
{
break;
}
byte[] buf = line.getBytes();
//设定发出方的位置(名称/ip 端口)
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket dp =
new DatagramPacket(buf, buf.length, InetAddress.getByName("S10-M"), 10086);
//发送
ds.send(dp);
}
//别忘了关闭资源
ds.close();
}
public static void sopln(Object obj)
{
System.out.println(obj);
}
}
class UDPReceive2
{
public static void main(String[] args) throws UnknownHostException, IOException
{
//接收方需要监听相对应的端口
DatagramSocket ds = new DatagramSocket(10086);
while (true)
{
byte[] buf = new byte[1024];
//byte[] buf, int offset, int length)
//给发过来的包找个放的地方
DatagramPacket dp =
new DatagramPacket(buf, 0 ,buf.length);
ds.receive(dp);
//把对方的地址信息和数据信息分别读取出来
String data = new String(dp.getData(),0, dp.getLength());
String address = dp.getAddress().getHostName();
int port = dp.getPort();
sopln(address+":"+data+port);
}
// ds.close(); 老师就不关闭了
}
public static void sopln(Object obj)
{
System.out.println(obj);
}
}