聊天程序的一些注意事项

时间:2022-02-22 09:11:02

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);
}
}