@Sarah
2015-12-24T16:14:40.000000Z
字数 2578
阅读 1261
java笔记
是放进一个buff里了
发送信息时,Java程序创建一个包含了待发送信息的DatagramPacket实例,并将其作为参数传递给DatagramSocket类的send()方法。接收信息时,Java程序首先创建一个DatagramPacket实例,该实例中预先分配了一些空间(一个字节数组byte[]),并将接收到的信息存放在该空间中。然后把该实例作为参数传递给DatagramSocket类的receive()方法。
除传输的信息本身外,每个DatagramPacket实例中还附加了地址和端口信息,其具体含义取决于该数据报文是被发送还是被接收。若是要发送的数据报文, DatagramPacket实例中的地址则指明了目的地址和端口号,若是接收到的数据报文, DatagramPacket实例中的地址则指明了所收信息的源地址。因此,服务器端可以修改接收到的DatagramPacket实例的缓存区内容,再将这个实例连同修改后的信息一起,发回给它的源地址。在DatagramPacket的内部也有length和offset字段,分别定义了数据信息在缓存区的起始位置和字节数。
用datagrampocket 可以多对多同时接送消息,而不是之前只能是一对一,
//⬇️客户端和服务器之间可以互相发送消息
用的线程,这样不用等一方结束信息另一方才可以发,而是可以同时发
数据报:一方信息发出去以后不用管另一方是否接收到,
//sender
package socket;
import java.io.*;
import java.net.*;
public class Sender extends Thread {
//新建个线程
Socket socket;
BufferedWriter bw;
public Sender(Socket s) throws Exception{
if(s!=null){
socket=s;
bw = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
}
else {
throw new Exception("Socket对象不能为空!");
}
}
public void run(){
try {
BufferedReader kr = new BufferedReader(new InputStreamReader(
System.in));
while(true){
String t=kr.readLine();
bw.write(t+"\n");
bw.flush();
if(t.equals("exit"))
System.exit(0);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//receiver
package socket;
import java.io.*;
import java.net.*;
public class Receiver extends Thread{
//新建个线程
Socket socket;
public Receiver(Socket s) throws Exception{
if(s!=null){
socket=s;
}
else {
throw new Exception("error!");
}
}
public void run(){
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
do {
String t=br.readLine();
System.out.println(t);
if(t.equals("exit"))
System.exit(0);
} while (true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//客户端
package socket;
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws Exception {
System.err.print("客户端和127.0.0.1:8000建立连接...");
Socket s = new Socket("127.0.0.1", 8000);
System.out.println("ok.");
Sender sender=new Sender(s);
//调用snder类
sender.start();
Receiver receiver=new Receiver(s);
//调用receiver类
receiver.start();
}
}
//服务器
package socket;
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws Exception {
System.err.print("在8000端口建立连接...");
ServerSocket ss = new ServerSocket(8000);
System.out.println("ok.");
System.out.print("等待客户端的连接...");
Socket s = ss.accept();
System.out.println("ok.");
Sender sender=new Sender(s);//调用sender
sender.start();
Receiver receiver=new Receiver(s);//调用receiver
receiver.start();
}
}
接下来要做的小程序
1日程表:用IO写在文件里
查看
录入任务
删除任务
修改任务
声音提醒 用现成的播放器
2四六级背单词:中英文
每次背20个
记录每次背单词的时间年月日小时,隔多久就提醒复习
她万一忘了就提醒给背单词啦 上次是什么时候
可以练习 给四个选项 选英文
3聊天室
好友列表 显示在线/离线
显示好友详细信息
聊天
传输
注册
修改信息
选择好友