socket
来源:互联网 发布:js判断不等于0 编辑:程序博客网 时间:2024/06/16 08:12
public class Demo1_Receive {
/** ** 2.接收Receive * 创建DatagramSocket, 指定端口号 * 创建DatagramPacket, 指定数组, 长度 * 使用DatagramSocket接收DatagramPacket * 关闭DatagramSocket * 从DatagramPacket中获取数据 * @throws Exception */public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(6666); //创建Socket相当于创建码头 DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建Packet相当于创建集装箱 socket.receive(packet); //接货,接收数据 byte[] arr = packet.getData(); //获取数据 int len = packet.getLength(); //获取有效的字节个数 System.out.println(new String(arr,0,len)); socket.close();}
}
public class Demo1_Send {
/** * * 1.发送Send * 创建DatagramSocket, 随机端口号 * 创建DatagramPacket, 指定数据, 长度, 地址, 端口 * 使用DatagramSocket发送DatagramPacket * 关闭DatagramSocket * @throws SocketException * @throws UnknownHostException */public static void main(String[] args) throws Exception { String str = "what are you 弄啥呢?"; DatagramSocket socket = new DatagramSocket(); //创建Socket相当于创建码头 DatagramPacket packet = //创建Packet相当于集装箱 new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666); socket.send(packet); //发货,将数据发出去 socket.close(); //关闭码头}
}
public class Demo2_Receive {
/** ** 2.接收Receive * 创建DatagramSocket, 指定端口号 * 创建DatagramPacket, 指定数组, 长度 * 使用DatagramSocket接收DatagramPacket * 关闭DatagramSocket * 从DatagramPacket中获取数据 * @throws Exception */public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(6666); //创建Socket相当于创建码头 DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建Packet相当于创建集装箱 while(true) { socket.receive(packet); //接货,接收数据 byte[] arr = packet.getData(); //获取数据 int len = packet.getLength(); //获取有效的字节个数 String ip = packet.getAddress().getHostAddress(); //获取ip地址 int port = packet.getPort(); //获取端口号 System.out.println(ip + ":" + port + ":" + new String(arr,0,len)); }}
}
public class Demo2_Send {
/** * * 1.发送Send * 创建DatagramSocket, 随机端口号 * 创建DatagramPacket, 指定数据, 长度, 地址, 端口 * 使用DatagramSocket发送DatagramPacket * 关闭DatagramSocket * @throws SocketException * @throws UnknownHostException */public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); //创建键盘录入对象 DatagramSocket socket = new DatagramSocket(); //创建Socket相当于创建码头 while(true) { String line = sc.nextLine(); //获取键盘录入的字符串 if("quit".equals(line)) { break; } DatagramPacket packet = //创建Packet相当于集装箱 new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666); socket.send(packet); //发货,将数据发出去 } socket.close(); //关闭码头}
}
public class Demo3_MoreThread {
/** * @param args */public static void main(String[] args) { new Receive().start(); new Send().start();}
}
class Receive extends Thread {
public void run() {
try {
DatagramSocket socket = new DatagramSocket(6666); //创建Socket相当于创建码头
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建Packet相当于创建集装箱
while(true) { socket.receive(packet); //接货,接收数据 byte[] arr = packet.getData(); //获取数据 int len = packet.getLength(); //获取有效的字节个数 String ip = packet.getAddress().getHostAddress(); //获取ip地址 int port = packet.getPort(); //获取端口号 System.out.println(ip + ":" + port + ":" + new String(arr,0,len)); } } catch (IOException e) { e.printStackTrace(); }}
}
class Send extends Thread {
public void run() {
try {
Scanner sc = new Scanner(System.in); //创建键盘录入对象
DatagramSocket socket = new DatagramSocket(); //创建Socket相当于创建码头
while(true) { String line = sc.nextLine(); //获取键盘录入的字符串 if("quit".equals(line)) { break; } DatagramPacket packet = //创建Packet相当于集装箱 new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666); socket.send(packet); //发货,将数据发出去 } socket.close(); } catch (IOException e) { e.printStackTrace(); } }
}
public class Demo4_GUIChat extends Frame {
private TextField tf;private Button send;private Button log;private Button clear;private Button shake;private TextArea viewText;private TextArea sendText;private DatagramSocket socket;private BufferedWriter bw;/** * @param args * GUI聊天 */public Demo4_GUIChat() { init(); southPanel(); centerPanel(); event();}public void event() { this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { try { socket.close(); bw.close(); } catch (IOException e1) { e1.printStackTrace(); } System.exit(0); } }); send.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { send(); } catch (IOException e1) { e1.printStackTrace(); } } }); log.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { logFile(); } catch (IOException e1) { e1.printStackTrace(); } } }); clear.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { viewText.setText(""); } }); shake.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { send(new byte[]{-1},tf.getText()); } catch (IOException e1) { e1.printStackTrace(); } } }); sendText.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { //if(e.getKeyCode() == KeyEvent.VK_ENTER && e.isControlDown()) { //isControlDown ctrl是否被按下 if(e.getKeyCode() == KeyEvent.VK_ENTER) { try { send(); } catch (IOException e1) { e1.printStackTrace(); } } } });}private void shake() { int x = this.getLocation().x; //获取横坐标位置 int y = this.getLocation().y; //获取纵坐标位置 for(int i = 0; i < 20; i++) { try { this.setLocation(x + 20, y + 20); Thread.sleep(20); this.setLocation(x + 20, y - 20); Thread.sleep(20); this.setLocation(x - 20, y + 20); Thread.sleep(20); this.setLocation(x - 20, y - 20); Thread.sleep(20); this.setLocation(x, y); } catch (InterruptedException e) { e.printStackTrace(); } }}private void logFile() throws IOException { bw.flush(); //刷新缓冲区 FileInputStream fis = new FileInputStream("config.txt"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //在内存中创建缓冲区 int len; byte[] arr = new byte[8192]; while((len = fis.read(arr)) != -1) { baos.write(arr, 0, len); } String str = baos.toString(); //将内存中的内容转换成了字符串 viewText.setText(str); fis.close();}private void send(byte[] arr, String ip) throws IOException { DatagramPacket packet = new DatagramPacket(arr, arr.length, InetAddress.getByName(ip), 9999); socket.send(packet); //发送数据}private void send() throws IOException { String message = sendText.getText(); //获取发送区域的内容 String ip = tf.getText(); //获取ip地址; ip = ip.trim().length() == 0 ? "255.255.255.255" : ip; send(message.getBytes(),ip); String time = getCurrentTime(); //获取当前时间 String str = time + " 我对:" + (ip.equals("255.255.255.255") ? "所有人" : ip) + "说\r\n" + message + "\r\n\r\n"; //alt + shift + l 抽取局部变量 viewText.append(str); //将信息添加到显示区域中 bw.write(str); //将信息写到数据库中 sendText.setText("");}private String getCurrentTime() { Date d = new Date(); //创建当前日期对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); return sdf.format(d); //将时间格式化}public void centerPanel() { Panel center = new Panel(); //创建中间的Panel viewText = new TextArea(); sendText = new TextArea(5,1); center.setLayout(new BorderLayout()); //设置为边界布局管理器 center.add(sendText,BorderLayout.SOUTH); //发送的文本区域放在南边 center.add(viewText,BorderLayout.CENTER); //显示区域放在中间 viewText.setEditable(false); //设置不可以编辑 viewText.setBackground(Color.WHITE); //设置背景颜色 sendText.setFont(new Font("xxx", Font.PLAIN, 15)); viewText.setFont(new Font("xxx", Font.PLAIN, 15)); this.add(center,BorderLayout.CENTER);}public void southPanel() { Panel south = new Panel(); //创建南边的Panel tf = new TextField(15); tf.setText("127.0.0.1"); send = new Button("发 送"); log = new Button("记 录"); clear = new Button("清 屏"); shake = new Button("震 动"); south.add(tf); south.add(send); south.add(log); south.add(clear); south.add(shake); this.add(south,BorderLayout.SOUTH); //将Panel放在Frame的南边}public void init() { this.setLocation(500, 50); this.setSize(400, 600); new Receive().start(); try { socket = new DatagramSocket(); bw = new BufferedWriter(new FileWriter("config.txt",true)); //需要在尾部追加 } catch (Exception e) { e.printStackTrace(); } this.setVisible(true);}private class Receive extends Thread { //接收和发送需要同时执行,所以定义成多线程的 public void run() { try { DatagramSocket socket = new DatagramSocket(9999); DatagramPacket packet = new DatagramPacket(new byte[8192], 8192); while(true) { socket.receive(packet); //接收信息 byte[] arr = packet.getData(); //获取字节数据 int len = packet.getLength(); //获取有效的字节数据 if(arr[0] == -1 && len == 1) { //如果发过来的数组第一个存储的值是-1,并且数组长度是1 shake(); //调用震动方法 continue; //终止本次循环,继续下次循环,因为震动后不需要执行下面的代码 } String message = new String(arr,0,len); //转换成字符串 String time = getCurrentTime(); //获取当前时间 String ip = packet.getAddress().getHostAddress(); //获取ip地址 String str = time + " " + ip + " 对我说:\r\n" + message + "\r\n\r\n"; viewText.append(str); bw.write(str); } } catch (Exception e) { e.printStackTrace(); } }}public static void main(String[] args) { new Demo4_GUIChat();}
}
阅读全文
0 0
- socket
- socket
- Socket
- Socket
- Socket
- Socket
- Socket
- Socket
- socket
- Socket
- Socket
- Socket
- Socket
- socket
- socket
- socket
- socket
- socket
- make切换到另一目录并执行另一目录makefile
- 【QT】获取时间戳
- TCP/IP协议简介
- deeplearning_LogisticRegressionwithaNeuralNetworkmindset
- 机器翻译(一):BLEU(bilingual evaluation understudy)
- socket
- 表单设计案例——学生入校注册页面设计
- 问题:2006年培养学员八万人,每年增长25%,请问按此增长速度,到哪一年培训学员人数达到20万人?
- Spring源码分析:多个bean同时满足注入条件时,spring的选择
- deeplearning_Planardataclassificationwithonehiddenlayer
- Qemu for windows 使用实例
- 决策树
- 操作系统_信号量
- 筛法求素数