目录
套接字Socket
什么是服务器
对外提供服务的一套软件,放在网络上(IP地址)
什么是客户端
为了连接服务器的一个软件
TCP/IP是干什么?
打个比方:TCP协议就相当于中国邮政,用来做运输
IP协议就相当于邮政编码。用来唯一标记目的地
网络编程三要素
- 协议(TCP/IP)
-
IP地址
- 局域网IP地址
- 公网IP地址(买的)
- 查看本机IP操作
在指令面板输入:ipconfig
4.域名
5.Java提供了一个类InerAddress方便我们对ip地址操作
方法:
static InetAddress getByName(String hast):确定主机名称的IP地址。主机名称可以是
机器名称,也可以是IP地址
String getHostName():获取此IP地址的主机名
String getHoStAddress():返回文本显示中的地址字符串
3.端口
端口号:用两个字节表示的整数,他的取值范围是0~65535
1. 公认端口:0~1023。被预先定义的服务通信占用,如:HTTP(80),FTP(21),Telnet(23)
2. 注册端口:1024~49151。分配给用户进程或应用程序。如:Tomcat(8080),MySQL(3306),Oracle(1521)。
3. 动态/ 私有端口:49152~65535。
5、网络编程
服务器端的编写流程(看不懂就直接背会)
1、创建SeverSocket对象,并设置端口
ServerSocket serverSocket=new ServerSocket(8888);
2、调用accpet方法,监听要连接到此套接字,并接收他
Socket socket=serverSocket.accept();
3、接收客户端数据
InputStream is=socket.getInputStream();
byte[] b=new byte[1024];
int len;
StringBuilder s=new StringBuilder();
while ((len=is.read(b))!=-1){
s.append(new String(b,0,len));
}
4、返回客户段数据
OutputStream os=socket.getOutputStream();
os.write("哈哈哈".getBytes());
os.flush();
5、释放资源
socket.close();
serverSocket.close();
//3、4、5写入线程来实现一个服务器接收多个客户端
static class Client3 extends Thread{
private Socket socket;
public Client3(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
//字符输入流 接收客户端信息
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//字符输出流 向客户端返回信息
PrintStream ps=new PrintStream(socket.getOutputStream());
//接收客户端传入的内容
String s;
while ((s= br.readLine())!=null){
StringBuilder stringBuilder=new StringBuilder(s);
stringBuilder.reverse();//字符串反转
//传回到客户端
System.out.print("内容反转后:");
ps.println(stringBuilder);
}
System.out.println("正常退出");
} catch (IOException e) {
System.out.println("异常退出");
}finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//实现一个服务器连接多个客户端
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(888);
System.out.println("等待连接");
int count=0;
while (true){
Socket socket=serverSocket.accept();
count++;
System.out.println("第"+cunt+"个客户端:"+socket.getInetAddress().socket.getHostAddress());
Client3 client3=new Client3(socket);
client3.start();
}
}
客户端的编写流程(看不懂直接背会就好)
1、连接服务器
Socket socket=new Socket("IP",端口号);
2、向服务器传输数据
OutputStream os=socket.getOutputStream();
os.write();
3、接收服务器数据
InputStream is=socket.getInputStream();
byte[] b=new byte[1024];
int len;
StringBuilder s=new StringBuilder();
while ((len=is.read(b))!=-1){
s.append(new String(b,0,len));
}
4、释放资源
socket.close();