------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.TCP演示2,客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
/*
演示TCP传输
TCP分为客户端和服务端
客户端对应的对象是:Socket
服务端对应的对象是:ServerSocket
演示tcp的传输的客户端和服务端的互访。
需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
客户端:
1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
*/
import java.net.*;
import java.io.*;
class Client2
{
public static void main(String[] args) throws Exception
{
//创建Socket服务,并指定主机,和端口号
Socket s = new Socket("192.168.1.106",10004);
//为了发送数据,所以得先获取输出流
OutputStream os = s.getOutputStream();
os.write("hello world".getBytes());
//为了接受数据,所以获得输入流
InputStream is = s.getInputStream();
byte[] buf = new byte[1024];
int len = is.read(buf);
System.out.println(new String(buf,0,len));
//关闭流
s.close();
}
}
/*
需求:定义端点接收数据并打印在控制台上。
服务端:
1,建立服务端的socket服务。ServerSocket();
并监听一个端口。
2,获取连接过来的客户端对象。
通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。
并打印在控制台。
4,获取客户端输出流,输出数据
5,关闭服务端。(可选)
*/
class Server2
{
public static void main(String[] args) throws Exception
{
//建立服务端socket,并监听一个端口
ServerSocket ss = new ServerSocket(10004);
//获取客户端连接过来的对象
Socket s = ss.accept();
//获取客户端对象的流,进行读取数据
InputStream is = s.getInputStream();
byte[] b = new byte[1024] ;
int len = is.read(b);
System.out.println(new String(b,0,len)+s.getInetAddress().getHostAddress());
//获取客户端对象输出流
OutputStream os = s.getOutputStream();
os.write("服务端已收到".getBytes());
s.close();
ss.close();
}
}
2.
/*
需求:建立一个文本转换服务器。
客户端给服务端发送文本,服务单会将文本转成大写在返回给客户端。
而且客户度可以不断的进行文本转换。当客户端输入over时,转换结束。
分析:
客户端:
既然是操作设备上的数据,那么就可以使用io技术,并按照io的操作规律来思考。
源:键盘录入。
目的:网络设备,网络输出流。
而且操作的是文本数据。可以选择字符流。
步骤
1,建立服务。
2,获取键盘录入。
3,将数据发给服务端。
4,后去服务端返回的大写数据。
5,结束,关资源。
都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲。
*/
import java.io.*;
import java.net.*;
class ClientTrans
{
public static void main(String[] args) throws Exception
{
//创建客户端Socket
Socket s = new Socket("192.168.1.106",10006);
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
//获取Socket输出流
BufferedWriter bufOut =
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//获取Socket输入流
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
String temp = null;
//键盘录入不为空
while((temp=bufr.readLine())!=null)
{
if("over".equals(temp))
break;
//将读到了一行数据写到Socket的输出流中
bufOut.write(temp);
//因为接受端是读一行数据,一行数据的结束时换行符,所以应该传一个换行符过去
bufOut.newLine();
//将缓冲区中的数据,刷出去
bufOut.flush();
System.out.println(bufIn.readLine());
}
bufr.close();
s.close();
}
}
/*
服务器端
*/
class ServerTrans
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10006);
Socket s = ss.accept();
//获取Socket输出流
BufferedWriter bufOut =
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//获取Socket输入流
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(s.getInetAddress().getHostAddress());
String temp = null;
while((temp=bufIn.readLine())!=null)
{
System.out.println(temp);
String str = temp.toUpperCase();
bufOut.write(str);
bufOut.newLine();
bufOut.flush();
}
ss.close();
s.close();
}
}
3.客户端上传文件到服务器端
/*客户端上传文件到服务器端,
服务器接收到返回“上传成功”
*/
import java.io.*;
import java.net.*;
class TextClient
{
public static void main(String[] args) throws Exception
{
//创建客户端Socket
Socket s = new Socket("192.168.1.106",10006);
BufferedReader bufr =
new BufferedReader(new FileReader("IPDemo.java"));
//Socket输出流
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
//Socket输入流
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
String temp = null;
while((temp=bufr.readLine())!=null)
{
pw.println(temp);
}
//关闭客户端的输出流。相当于给流中加入一个结束标记-1.
s.shutdownOutput();
System.out.println(bufIn.readLine());
bufr.close();
s.close();
}
}
/*
服务器端
*/
class TextServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10006);
Socket s = ss.accept();
//创建服务端往本地的输出流
PrintWriter pw =
new PrintWriter(new FileOutputStream(new File("upload.txt")),true);
//获取Socket输入流
BufferedReader bufIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
//Socket输出流
PrintWriter pOut = new PrintWriter(s.getOutputStream(),true);
System.out.println(s.getInetAddress().getHostAddress());
String temp = null;
while((temp=bufIn.readLine())!=null)
{
pw.println(temp);
}
pOut.println("上传成功!");
pw.close();
ss.close();
s.close();
}
}
4.
/*
需求:上传图片。
服务器多线程接收不同客户端传送的数据
键盘输入客户端要传送的文件名,并判断。
服务器端,要是上传的文件名重复,则写新的文件名
客户端。
1,服务端点。
2,读取客户端已有的图片数据。
3,通过socket 输出流将数据发给服务端。
4,读取服务端反馈信息。
5,关闭。
*/
import java.io.*;
import java.net.*;
class PicClient
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.1.106",10008);
//动态输入文件名
if(args.length!=1)
{
System.out.println("请输入一个文件名");
return;
}
//判断是否符合要求
File f = new File(args[0]);
if(!(f.exists() && f.isFile()))
{
System.out.println("请正确的文件");
return;
}
if(!(f.getName().endsWith(".bmp") || f.getName().endsWith(".jpg")))
{
System.out.println("请输入正确的图片文件");
return;
}
FileInputStream fis = new FileInputStream(f);
OutputStream fos = s.getOutputStream();
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
s.shutdownOutput();
InputStream fisIn = s.getInputStream();
byte[] buf2 = new byte[1024];
int len2 = fisIn.read(buf2);
System.out.println(new String(buf2,0,len2));
s.close();
fis.close();
}
}
/*
服务器端利用线程
*/
class PicThread implements Runnable
{
private Socket s = null;
PicThread(Socket s)
{
this.s = s;
}
public void run()
{
FileOutputStream fos = null;
try
{
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"........connected");
InputStream is = s.getInputStream();
/*
判断文件是否存在,若是存在就"upload("+(count++)+").jpg"
*/
File f = new File("upload.jpg");
int count = 1;
while(f.exists())
{
f = new File("upload("+(count++)+").jpg");
}
fos = new FileOutputStream(f);
byte[] buf = new byte[1024];
int len = 0;
while((len=is.read(buf))!=-1)
{
fos.write(buf);
}
OutputStream os = s.getOutputStream();
os.write("上传成功".getBytes());
s.close();
fos.close();
}catch(IOException e)
{
throw new RuntimeException("出错");
}
}
}
class PicServer
{
public static void main(String[] args)throws Exception
{
ServerSocket ss = new ServerSocket(10008);
while(true)
{
Socket s = ss.accept();
new Thread(new PicThread(s)).start();
}
//ss.close();
}
}
6.URL应用
import java.net.*;
class URLDemo
{
public static void main(String[] args) throws MalformedURLException
{
URL url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");
System.out.println("getProtocol() :"+url.getProtocol());
System.out.println("getHost() :"+url.getHost());
System.out.println("getPort() :"+url.getPort());
System.out.println("getPath() :"+url.getPath());
System.out.println("getFile() :"+url.getFile());
System.out.println("getQuery() :"+url.getQuery());
/*int port = getPort();
if(port==-1)
port = 80;
getPort()==-1
*/
}
}
/*
String getFile()
获取此 URL 的文件名。
String getHost()
获取此 URL 的主机名(如果适用)。
String getPath()
获取此 URL 的路径部分。
int getPort()
获取此 URL 的端口号。
String getProtocol()
获取此 URL 的协议名称。
String getQuery()
获取此 URL 的查询部
*/
7.URLConnection连接到服务器并获取返回数据
import java.net.*;
import java.io.*;
class URLConnectionDemo
{
public static void main(String[] args) throws Exception
{
URL url = new URL("http://192.168.1.254:8080/myweb/demo.html");
URLConnection conn = url.openConnection();
System.out.println(conn);
InputStream in = conn.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf,0,len));
}
}