TCP: 客户端 ——Socket对象
服务器——SocketServer对象
package InetAdressTest;
/*
* 实现TCP客户端
* 1. 创建Socket对象,服务器IP,端口
* 2. Socket对象方法 getOutputStream获取字节输出流,写到服务器
* 3. Socket对象方法 getInputStream获取字节输入流,读取服务器回来数据
* 4. 关闭资源
*/
import java.io.*;
import java.net.Socket;
public class TCPclient
{
/**客户端Socket
* Socket类的
* 构造
* Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket(String host, int port) host代表服务器端的ip地址 port代表服务器端的端口号
方法
OutputStream getOutputStream() 返回此套接字的输出流。
* @param args
* @throws Exception
*/
public static void main(String[] args)throws Exception {
//创建Socket对象,服务器,端口
Socket s=new Socket("172.16.0.162",10000);
//2 Socket 对象方法,getOutputStream获取字节输出流,写到服务端
OutputStream out=s.getOutputStream();
out.write("年您凯迪克额离开的dge slg ".getBytes());
//3 Socket 对象方法 getInputStream获取字节输入流,读取服务器回来数据
InputStream in=s.getInputStream();
byte[] bytes=new byte[1024];
int len=0;
len=in.read(bytes);
System.out.println(new String(bytes,0,len));
//关闭资源
out.close();
s.close();
}
}
package InetAdressTest;
/*
* 实现TCP服务器
* 1. 创建ServerSocket对象,打开端口
* 2. 使用ServerSocket对象方法accept获取客户端连接对象
* 3. 客户端连接对象Socket获取IO
* 4. Socket getInputStream获取字节输入流,读取客户端发来数据
* 5. Socket getOutputStream获取字节输出流,将数据写回客户端
* 6. 关闭
*/
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPserverSocket {
/**ServerSocket服务器端的对象
* 构造
* ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
*
* 方法:
* Socket accept() 侦听并接受到此套接字的连接。
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception{
//1创建serverSocket 对象,打开端口
ServerSocket ss=new ServerSocket(10000);
//2使用ServerSocket 对象方法accept获取客户端连接对象
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip);
//3客户端连接对象
//4Socket getInputStream获取字节输入流,读取客户端发来的数据
InputStream in=s.getInputStream();
int len=0;
byte[] bytes=new byte[1024];
len=in.read(bytes);
System.out.println(new String(bytes,0,len));
//5 Socket getOutputStream() 获取字节输出流,将数据写入客户端
OutputStream out=s.getOutputStream();
out.write("哈哈收到了".getBytes());
//6关闭资源
out.close();
s.close();
ss.close();
}
}
通过TCP上传图片
/*
* TCP图片上传客户端
* 读图片,写到服务器
* 读取服务器发回来的 上传成功
*/
import java.io.*;
import java.net.Socket;
public class TcpClientPage {
public static void main(String[] args) throws Exception{
//1创建Socket 对象,服务器,端口
Socket s=new Socket("172.16.0.162",10020);
//2字节流读取图片
FileInputStream f=new FileInputStream("/home/gch/A/2.png");
OutputStream out=s.getOutputStream();
int len=0;
byte[] by=new byte[1024];
while((len=f.read(by))!=-1){
out.write(by,0,len);
}
//3客户端写个结束标记,告诉服务端
s.shutdownOutput();
//4读取服务器发回的上传成功
InputStream in=s.getInputStream();
len=in.read(by);
System.out.println("服务器说:"+new String(by,0,len));
//5 关闭资源
in.close();
out.close();
f.close();
s.close();
}
}
/*
*实现TCP图片上传服务器
* 读取客户端发来图片(字节数组)
* 将图片写到自己的文件夹 /home/gch/B
* 将上传成功回写客户端
*/
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;
import java.util.Random;
public class TcpServerSocketPage {
public static void main(String[] args) throws IOException{
//1创建ServerSocket对象,打开端口
ServerSocket ss=new ServerSocket(10020);
//2接受ServerSocket
Socket s=ss.accept();
//获取字节输入流,读取客户端图片
InputStream in=s.getInputStream();
//将文件封装到File对象
File fi=new File("/home/gch/B");
//如果文件不存在,创建一个新文件
if(!fi.exists()){
fi.mkdirs();
}
//对上传文件,从新命名 规则: 域名+日期+毫秒值+8随机数
String filename="yaa"+System.currentTimeMillis()+new Random().nextInt(99999999)+".png";
//4//创建字节输出流,写图片 "/home/B/t.png"
FileOutputStream fo=new FileOutputStream(fi+File.separator+filename);
byte[] by=new byte[1024];
int len=0;
while((len=in.read())!=-1){
fo.write(by,0,len);
}
//将上传成功写给客户端
OutputStream out=s.getOutputStream();
out.write("上传成功".getBytes());
//关闭资源
in.close();
out.close();
fo.close();
ss.close();
}
}
/*
*实现TCP图片上传服务器
* 读取客户端发来图片(字节数组)
* 将图片写到自己的文件夹 /home/gch/B
* 将上传成功回写客户端
*/
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;
import java.util.Random;
public class TcpServerSocketPage {
public static void main(String[] args) throws IOException{
//1创建ServerSocket对象,打开端口
ServerSocket ss=new ServerSocket(10020);
//2接受ServerSocket
Socket s=ss.accept();
//获取字节输入流,读取客户端图片
InputStream in=s.getInputStream();
//将文件封装到File对象
File fi=new File("/home/gch/B");
//如果文件不存在,创建一个新文件
if(!fi.exists()){
fi.mkdirs();
}
//对上传文件,从新命名 规则: 域名+日期+毫秒值+8随机数
String filename="yaa"+System.currentTimeMillis()+new Random().nextInt(99999999)+".png";
//4//创建字节输出流,写图片 "/home/B/t.png"
FileOutputStream fo=new FileOutputStream(fi+File.separator+filename);
byte[] by=new byte[1024];
int len=0;
while((len=in.read())!=-1){
fo.write(by,0,len);
}
//将上传成功写给客户端
OutputStream out=s.getOutputStream();
out.write("上传成功".getBytes());
//关闭资源
in.close();
out.close();
fo.close();
ss.close();
}
}