[关闭]
@Sarah 2015-12-24T16:14:40.000000Z 字数 2578 阅读 1261

JAVA datagrampocket

java笔记

datagrampocket

是放进一个buff里了

发送信息时,Java程序创建一个包含了待发送信息的DatagramPacket实例,并将其作为参数传递给DatagramSocket类的send()方法。接收信息时,Java程序首先创建一个DatagramPacket实例,该实例中预先分配了一些空间(一个字节数组byte[]),并将接收到的信息存放在该空间中。然后把该实例作为参数传递给DatagramSocket类的receive()方法。
除传输的信息本身外,每个DatagramPacket实例中还附加了地址和端口信息,其具体含义取决于该数据报文是被发送还是被接收。若是要发送的数据报文, DatagramPacket实例中的地址则指明了目的地址和端口号,若是接收到的数据报文, DatagramPacket实例中的地址则指明了所收信息的源地址。因此,服务器端可以修改接收到的DatagramPacket实例的缓存区内容,再将这个实例连同修改后的信息一起,发回给它的源地址。在DatagramPacket的内部也有length和offset字段,分别定义了数据信息在缓存区的起始位置和字节数。

用datagrampocket 可以多对多同时接送消息,而不是之前只能是一对一,

//⬇️客户端和服务器之间可以互相发送消息
用的线程,这样不用等一方结束信息另一方才可以发,而是可以同时发
数据报:一方信息发出去以后不用管另一方是否接收到,

  1. //sender
  2. package socket;
  3. import java.io.*;
  4. import java.net.*;
  5. public class Sender extends Thread {
  6. //新建个线程
  7. Socket socket;
  8. BufferedWriter bw;
  9. public Sender(Socket s) throws Exception{
  10. if(s!=null){
  11. socket=s;
  12. bw = new BufferedWriter(new OutputStreamWriter(
  13. socket.getOutputStream()));
  14. }
  15. else {
  16. throw new Exception("Socket对象不能为空!");
  17. }
  18. }
  19. public void run(){
  20. try {
  21. BufferedReader kr = new BufferedReader(new InputStreamReader(
  22. System.in));
  23. while(true){
  24. String t=kr.readLine();
  25. bw.write(t+"\n");
  26. bw.flush();
  27. if(t.equals("exit"))
  28. System.exit(0);
  29. }
  30. } catch (IOException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34. }
  35. }
  1. //receiver
  2. package socket;
  3. import java.io.*;
  4. import java.net.*;
  5. public class Receiver extends Thread{
  6. //新建个线程
  7. Socket socket;
  8. public Receiver(Socket s) throws Exception{
  9. if(s!=null){
  10. socket=s;
  11. }
  12. else {
  13. throw new Exception("error!");
  14. }
  15. }
  16. public void run(){
  17. try {
  18. BufferedReader br = new BufferedReader(new InputStreamReader(
  19. socket.getInputStream()));
  20. do {
  21. String t=br.readLine();
  22. System.out.println(t);
  23. if(t.equals("exit"))
  24. System.exit(0);
  25. } while (true);
  26. } catch (IOException e) {
  27. // TODO Auto-generated catch block
  28. e.printStackTrace();
  29. }
  30. }
  31. }
  1. //客户端
  2. package socket;
  3. import java.net.*;
  4. import java.io.*;
  5. public class Client {
  6. public static void main(String[] args) throws Exception {
  7. System.err.print("客户端和127.0.0.1:8000建立连接...");
  8. Socket s = new Socket("127.0.0.1", 8000);
  9. System.out.println("ok.");
  10. Sender sender=new Sender(s);
  11. //调用snder类
  12. sender.start();
  13. Receiver receiver=new Receiver(s);
  14. //调用receiver类
  15. receiver.start();
  16. }
  17. }
  1. //服务器
  2. package socket;
  3. import java.net.*;
  4. import java.io.*;
  5. public class Server {
  6. public static void main(String[] args) throws Exception {
  7. System.err.print("在8000端口建立连接...");
  8. ServerSocket ss = new ServerSocket(8000);
  9. System.out.println("ok.");
  10. System.out.print("等待客户端的连接...");
  11. Socket s = ss.accept();
  12. System.out.println("ok.");
  13. Sender sender=new Sender(s);//调用sender
  14. sender.start();
  15. Receiver receiver=new Receiver(s);//调用receiver
  16. receiver.start();
  17. }
  18. }

接下来要做的小程序
1日程表:用IO写在文件里
查看
录入任务
删除任务
修改任务
声音提醒 用现成的播放器

2四六级背单词:中英文
每次背20个
记录每次背单词的时间年月日小时,隔多久就提醒复习
她万一忘了就提醒给背单词啦 上次是什么时候
可以练习 给四个选项 选英文

3聊天室
好友列表 显示在线/离线
显示好友详细信息
聊天
传输
注册
修改信息
选择好友

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注