4.获取本地ip地址
InetAddress ip=InetAddress.getLocalHost();
System.out.println(ip);
}}
6.tcp:
tcp服务端:
public class TCPClient {
public static void main(String[] args) throws UnknownHostException, IOException{
/*
* tcp客户端的建立。
* 思路:
* 1.建立tcp客户端服务
* 1.1因为是面向连接,必须有链接才可以建立通信
* 1.2在创建客户端时,就必须明确目的的地址和端口
* 2.一旦连接确立,就有了传输数据的通道,就可以在通道中传输数据。
* 这个传输其实是通过流实现的,这个流就是socket io流。
* 3.只要获取socket io中的写动作就可以将数据写到socket流中给服务端。
* 4.关闭资源。
*
*/
System.out.println("客户端启动。。。");
//1.创建客户端对象,明确目的地址和端口
Socket s=new Socket("10.17.212.81",9999);
//2.获取socket流中的输出流,将数据发送给服务端
OutputStream out=s.getOutputStream();
//3.通过输出流写数据
out.write("注意啦 ,tcp来了".getBytes());
//4.关闭资源
s.close();
}
}
服务端:
public class TCPServer {
public static void main(String[] args) throws IOException{
/*
* 创建tcp服务端
* 思路:
* 1.创建socket服务端服务,服务端为让客户端可以连上,必须提供端口,监听端口。
* 2.获取客户端对象,通过客户端的socket流和对应的客户端进行通信
* 3.获取客户端的socket流的读取流
* 4.读取数据并显示在服务器端
* 5.关闭资源
*
*/
System.out.println("服务端启动");
//1.创建服务器端对象
ServerSocket ss=new ServerSocket(9999);
//2.获取客户端对象
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();//获取id对象的字符对象
System.out.println(ip+".....connected");
//3.通过客户端对象获取socket流的读取流
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);
String str=new String(buf, 0, len);
System.out.println(str);
s.close();
ss.close();
}
}
先运行服务端,再运行客户端
结果:
服务端启动
客户端启动。。。
10.17.212.81.....connected
注意啦 ,tcp来了
7.TCP服务端客户端互访:
public class TCPCLient2 {
public static void main(String[] args) throws UnknownHostException, IOException {
// 需求:客户端发送数据给服务端,并读取服务端反馈的数据
System.out.println("客户端2启动");
//1.创建socket客户端
Socket s=new Socket("10.17.212.81",8999);
//2.获取socket输出流,写数据
OutputStream out=s.getOutputStream();
out.write("服务端,我来了".getBytes());
//3.获取socket的读取流,读取服务端发回的数据
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);
String str=new String(buf, 0, len);
System.out.println(str);
s.close();
}
}
public class TCPCServer2 {
public static void main(String[] args) throws IOException {
// 服务端收到客户端的数据并反馈数据给客户端,应答
//1.创建服务端socket对象
ServerSocket ss=new ServerSocket(8999);
System.out.println("服务器端2启动。。。。");
//2.获取客户端对象
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();//获取ip地址字符对象
System.out.println(ip);
//3.获取socket读取流
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);
String str=new String(buf,0,len);
System.out.println(str);
//4.给客户端反馈数据,socket输出流
OutputStream out=s.getOutputStream();
out.write("hh你来了".getBytes());
s.close();
ss.close();
}
}
结果:
上传文本客户端:
package cn.itcast.net.tcp.uploadtext;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class UploadTextClient {
public static void main(String[] args) throws UnknownHostException, IOException{
/*
* 上传文本端的客户端,读取本地文本数据,发送给服务端,服务端接收完毕后,回馈“上传成功”字样
*/
System.out.println("上传文本客户端启动.....");
//客户端socket
Socket s=new Socket("10.17.212.81",16666);
//1.确立数据源,本地文件
BufferedReader bufr =new BufferedReader(new FileReader("cilent.txt"));
//2.确定目的,socket输出流
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
String line=null;
while((line=bufr.readLine())!=null){
out.println(line);
}
//给服务端传送标记
//out.print("over");//容易重复
//使用socket的禁用输出流方法
s.shutdownOutput();
//3.通过socket读取获取服务端返回的数据。
BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
String lineIn=bufIn.readLine();
System.out.println(lineIn);
//4.关闭
bufr.close();
s.close();
}
}
服务端:
package cn.itcast.net.tcp.uploadtext;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadTextServer {
public static void main(String[] args) throws IOException{
/*
* 上传文本的服务端,接受文本数据,并存储到文件中,服务端接受完毕后,反馈“上传成功”字样
*/
System.out.println("上传服务端启动....");
//1.服务端对象。
ServerSocket ss=new ServerSocket(16666);
//2.获取服务端
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected");
//3.获取读取流,确定源,网络socket
BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
//InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.而BufferedReader提供额外的功能
//4.确定目的、文件
PrintWriter pw=new PrintWriter(new FileWriter("server.txt"),true);
//5.频繁读写
String line=null;
while((line=bufIn.readLine())!=null){
pw.println(line);
}
//6.给客户端返回信息
PrintWriter out=new PrintWriter(s.getOutputStream(),true);//一定要加true噢
out.println("上传成功");
pw.close();
ss.close();
s.close();
}
}
注意:客户端中 的 使用socket的禁用输出流方法: s.shutdownOutput();
9.tcp上传图片:
客户端
package cn.itcast.net.tcp.uploadpic;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class UploadpicClient {
public static void main(String[] args) throws UnknownHostException, IOException{
//1.创建socket流
Socket s=new Socket("10.17.212.81",10086);
File picFile=new File("1.jpg");
FileInputStream fis=new FileInputStream(picFile);
OutputStream out=s.getOutputStream();
byte[] buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1){
out.write(buf, 0, len);
}
//告诉服务端写完了
s.shutdownOutput();
InputStream in=s.getInputStream();
byte[] bufIn=new byte[1024];
int lenIn=in.read(bufIn);
String str=new String(bufIn, 0, lenIn);
System.out.println(str);
fis.close();
s.close();
}
}
服务端:
package cn.itcast.net.tcp.uploadpic;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadPicServer {
public static void main(String[] args) throws IOException {
// 服务端对象
ServerSocket ss=new ServerSocket(10086);
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"......connected");
InputStream in=s.getInputStream();
File file = getFile("F:\\eclipse\\网络编程\\server_pic",ip);
FileOutputStream fos=new FileOutputStream(file);
byte[] buf=new byte[1024];
int len=0;
while((len=in.read(buf))!=-1){
fos.write(buf, 0, len);
}
//回馈给客户端
OutputStream out = s.getOutputStream();
out.write("上传图片成功".getBytes());
fos.close();
s.close();
ss.close();
}
//重名问题解决:
private static File getFile(String dir1, String ip) {
File dir=new File(dir1);
if(!dir.exists()){
dir.mkdir();
}
int count=1;
File file=new File(dir,ip+"("+count+").jpg");
while(file.exists()){
count++;
file=new File(dir,ip+"("+count+").jpg");
}
return file;
}
}
10.
TCP上传图片并发访问服务器--运用线程:
客户端和9一样
服务端:
package cn.itcast.net.tcp.uploadpic;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadPicServer {
public static void main(String[] args) throws IOException {
// 服务端对象
ServerSocket ss=new ServerSocket(10086);
while(true){
Socket s=ss.accept();
new Thread(new UploadPic(s)).start();//运用多线程
}
}
}
UploadPic():
public class UploadPic implements Runnable {
private Socket s;
public UploadPic(Socket s) {
super();
this.s = s;
}
@Override
public void run() {
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"......connected");
InputStream in;
try {
in = s.getInputStream();
File file = getFile("F:\\eclipse\\网络编程\\server_pic",ip);
FileOutputStream fos=new FileOutputStream(file);
byte[] buf=new byte[1024];
int len=0;
while((len=in.read(buf))!=-1){
fos.write(buf, 0, len);
}
//回馈给客户端
OutputStream out = s.getOutputStream();
out.write("上传图片成功".getBytes());
fos.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static File getFile(String dir1, String ip) {
File dir=new File(dir1);
if(!dir.exists()){
dir.mkdir();
}
int count=1;
File file=new File(dir,ip+"("+count+").jpg");
while(file.exists()){
count++;
file=new File(dir,ip+"("+count+").jpg");
}
return file;
}
}
常见的客户端和服务端有哪些呢?
客户端:浏览器、
服务端:Tomcat
如果请求多图片的网页,请求的次数很多,有多少资源(html文件,图片文件,css文件,js文件等)就需要请求多少次
12.URL: