笔记
网络连接之Tcp/Ip协议
这里只是简单的学习了tcp/ip协议,以及创建一个服务器套接字和客户端套接字,以实现单个服务器和单个客户的通信,如果要实现多对多的通信则需要用多线程的知识。
// 创建服务器
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class MyServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8080);
System.out.println("服务器启动");
Socket socket = server.accept();// 等待链接
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
while (true) {
String s = br.readLine();
System.out.println("客户:" + s);// 接收并输出客户数据
Scanner input = new Scanner(System.in);
String back = input.next();
bw.write(back + "\n"); //返回数据给客户
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 创建客户端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class MyClient {
public static void main(String[] args) {
try {
System.out.println("客户端启动");
Socket socket = new Socket("192.168.0.143", 8080);// 链接服务器
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while(true) {
Scanner input = new Scanner(System.in);
String s = input.next();//客户输入
bw.write(s + "\n"); // 加\n标识读出结束?
bw.flush();
String back = br.readLine();
System.out.println("服务器:" + back);// 接收并显示服务器数据
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
集合List,Map
List相当于长度可变的数组,它实现了Collection接口,用add()方法来添加元素,set(index,X)方法修改该下标处的元素,remove()方法用来删除元素,HashSet中不能存放重复的数据;Map通过key和values的映射来存取,修改元素。
List<String> list = new ArrayList<>();
list.add("a");
list.add("e");
list.add("f");
list.add("d");
list.add(2, "c");
list.set(1, "b"); // 修改下标处的元素
System.out.println(list.get(3));
list.remove(3);
System.out.println(list.size());
for (String s:list) {
System.out.println(s);
}
Random random = new Random();
HashSet<Integer> set = new HashSet<>();
int count = 1;
while (set.size() < 10) {
int i = random.nextInt(10);
System.out.println("第" + count++ + "次是" + i);
set.add(i);
}
// 迭代器,迭代
Iterator<Integer> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println(set.size());
Map<Integer, String> map = new HashMap<>();
map.put(1, "f");
map.put(2, "b");
map.put(3, "c");
map.put(4, "d");
map.put(5, "e");
Set<Integer> keys = map.keySet();
Iterator<Integer> it = keys.iterator();
while (it.hasNext()) {
int key = it.next();
System.out.println(map.get(key));
}
泛型
泛型可以用在某属性的类型不确定时。
// 泛型的综合应用,在测试类中测试,省略了其余代码
Student<Mcloth, Dog> lisi = new Student<>();
Student<Wcloth, Cat> liwu = new Student<>();
Dog dog = new Dog();
Mcloth m = new Mcloth();
Wcloth w = new Wcloth();
lisi.setPet(dog);
lisi.getPet().eat();
// 学生类
public class Student<T,E extends Animal> extends Person {
private int score;
private int id;
private T cloth;
private E pet;
public Student() {
}
public T getCloth() {
return cloth;
}
public void setCloth(T cloth) {
this.cloth = cloth;
}
public E getPet() {
return pet;
}
public void setPet(E pet) {
this.pet = pet;
}
}
总结
每日三省吾身,必有所获。不可懈怠,骄傲,敷衍。学习是收获知识和快乐,慢慢成长的过程,没有人能一步登天,抛却烦恼,积少成多,日后必有所获。正所谓:越努力,越靠近。