【黑马程序员】java中--------------------网络编程二

原创 2013年12月03日 22:10:25

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


一、TCP传输协议

TCP特点:

面向连接的、通信是安全可靠的、速度慢、可以用于大数据传输、通过3次握手建立连接

可以用于下载数据。


要用到net包和io包;

发送端:数据无需封包操作,直接通过socket类中的输出流和输入流,将数据输入或者输出到socket流中

需要定义结束标记

结束端:通过serverSocket类中,accept()进行连接发送端

用的缓冲区,需要用到io包

练习代码:

/*				Tcp传输
注意:一定一定要,使用了缓冲区技术,要换行newLine(),要刷新fulsh();

还有定义结束标记
*/

import java.net.*;
import java.io.*;
class Socket1
{
	public static void main(String[] args)throws Exception
	{	
		//创建socket流对象
		Socket s=new Socket("125.126.146.21",10004);
		//获取键盘录入
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		//获取socket输出流
		BufferedWriter bufwout=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//获取socket输入流
		BufferedReader bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line=null;
		while((line=bufr.readLine())!=null)
		{
			bufwout.write(line);
			if("over".equals(line))
				break;
			bufwout.newLine();//换行
			bufwout.flush();//刷新
			
			String str=bufrin.readLine();
		
			System.out.println("ServerSocket::"+str);
		}
		bufrin.close();
		s.close();
	
	}
}

//服务端
class TcpServer1
{
	public static void main(String[] args)throws Exception
	{	
		//创建服务端socket流对象
		ServerSocket ss=new ServerSocket(10004);
		//与客户端进行连接
		Socket s=ss.accept();
		//获取输入流
		BufferedReader bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
		//获取输出流
		BufferedWriter bufwout=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//获取客户端ip地址
		String ip=s.getInetAddress().getHostAddress();
		System.out.println("\\"+ip+"::::::::::::");
			
		String line=null;
		while((line=bufrin.readLine())!=null)
		{
			bufwout.write(line);
			//bufwout.write(line.toUpperCase());
			bufwout.newLine();//换行
			bufwout.flush();//刷新
			
			System.out.println("socket="+line);
		}
		bufwout.close();
	}
}

代码练习二:

/*	Tcp传输				Tcp传输,面向连接的,安全的传输协议
分为两部分:
客户端:socket类--->类中有getOutputStream()方法获取输出流
		在流中写入数据write()方法,并转换成字节流
进行发送数据。指定一个ip
*/
import java.net.*;
import java.io.*;
class Socket
{
	public static void main(String[] args)
	{
		Sockt s=new Socket("125.126.146.21",100002);
		OutputStream out=s.getOutptuStream();
		out.write("我是客户端".getBytes());
	
		s.close();
	}
}

/*
服务端接收数据,并打印在控制台
1,服务端:ServerSocket类,建立对象是并监听一个端口
2 ,获取连接过来的客户端对象
   通过ServerSocket对象的accept()方法。没有连接就会等,阻塞式方法
3,客户端如果发来数据,那么服务端要使用客户端对象
	并用客户端的读取流来读取客户端发来的数据
	并打印
4,关闭资源(可选项)
*/

class TcpServer
{
	public static void main(String[] args)
	{
		ServerSocket ss=new ServerSocket(10002);
		Socket s=ss.accept();
		InputStream in=s.getInputStream();
		
		String ip=s.getInetAddress.getHostAddress();
		System.out.println(ip);
		
		byte[] buf=new byte[1024];
		int len=in.read(buf);
		
		System.out.println(new String(buf,0,buf.length()));
	}
}

代码练习3: 上传图片到服务端

/*
						上传图片上传图片	上传图片

*/

import java.io.*;
import java.net.*;
class Pic{
	public static void main(String[] args)throws Exception
	{
		Socket s=new Socket("125.126.150.32",10003);
		
		FileInputStream fi=new FileInputStream("1psu.jpg");
		
		OutputStream out=s.getOutputStream();
		
		byte[] b=new byte[1024];
		int len=0;
		while((len=fi.read(b))!=-1){
			out.write(b,0,len);
		}
		//结束标记
		s.shutdownOutput();
		
		InputStream in=s.getInputStream();
		byte[] by=new byte[1024];
		int line=in.read(by);
		System.out.println(new String(by,0,line));
		
		fi.close();
		s.close();
		
	}
}

class PicServer{
	public static void main(String[] args)throws Exception
	{
		ServerSocket ss=new ServerSocket(10003);
		Socket s=ss.accept();
		
		InputStream in=s.getInputStream();
		FileOutputStream fos=new FileOutputStream("复制_秀云.jpg");
		
		String ip=s.getInetAddress().getHostAddress();
		System.out.println(ip);
		byte[] b=new byte[1024];
		int len=0;
		while((len=in.read(b))!=-1){
			fos.write(b,0,len);
		}
		
		OutputStream out=s.getOutputStream();
		out.write("pic图片上传成功!!!!!!!!!!!".getBytes());
		
		fos.close();
		s.close();
	}
}

代码练习4;上传文本文件到服务端

/*						上传文本文件:云.txt
 
 用于客户端的输出流:
 void shutdownOutput() 
          禁用此套接字的输出流。 
*/

import java.io.*;
import java.net.*;
//自定义客户端
class SocketTxt{
	public static void main(String[] args)throws Exception
	{
		Socket s=new Socket("125.126.150.32",10002);
		//创建带缓冲区的读取流对象
		BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("云.txt")));
		//创建socket输出流
		PrintWriter pwOut=new PrintWriter(s.getOutputStream(),true);
		String line=null;
		while((line=br.readLine())!=null){
			pwOut.write(line);
		
		}
		//输出流结束标记
		s.shutdownOutput();
		//获取socket读取流
		BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String len=brIn.readLine();
		System.out.println(len);
		
		
		br.close();
		s.close();
	}
}


//自定义服务端
class ServerSocketTxt{
	public static void main(String[] args)throws Exception
	{
		ServerSocket ss=new ServerSocket(10002);
		Socket s=ss.accept();
		
		BufferedReader brIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
		//PrintWriter pw=new PrintWriter(new FileWriter("云_复制.txt"),true);
		
		BufferedWriter bw=new BufferedWriter(new FileWriter("云_复制.txt"));
		
		//获取客户端ip地址
		String ip=s.getInetAddress().getHostAddress();
		System.out.println(ip);
		
		String line=null;
		while((line=brIn.readLine())!=null){
			//pw.println(line);
			bw.write(line);
		}
		//向客户端返回提示信息
		PrintWriter pwOut=new PrintWriter(s.getOutputStream(),true);
		pwOut.println("上传文件成功!!!");
		
		bw.close();
		//pw.close();
		s.close();
	}
}

代码练习5:自定义服务端,IE浏览器为客户端

/*服务端					服务端服务端服务端



*/
import java.net.*;
import java.io.*;

class TcpServerSocket2 {
        public static void main(String[] args) throws Exception {
                ServerSocket ss = new ServerSocket(10010);
                while (true) {
                        Socket s = ss.accept();
                        BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream());

                        System.out.println(s.getInetAddress().getHostAddress());
                        //PrintWriter pw = new PrintWriter(out, true);

                        //pw.println("欢迎访问我的服务器!");
                        //out.write(123456);

                        // 建立图片读取流对象,并写入ServerSocket流中,图片70.4kb
                        BufferedInputStream bis= new BufferedInputStream(new FileInputStream("1psu.jpg"));
                        byte[] buf = new byte[1024*1024];
                        int len = 0;
                        while ((len = bis.read(buf)) != -1) {
                                out.write(buf, 0, len);
                        }
                        
                        bis.close();
                        out.close();
                        //pw.close();
                        s.close();

                }

        }
}




相关文章推荐

黑马程序员——java基础知识之网络编程(二)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- (一)网络编程的深入 1、基础知识总结: ①网络编程:主要是和IO流联系紧密,基本上有网络编程的地方,就有...

黑马程序员_Java_网络编程(二)

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流!---------------------- 一.TCP基础     ...

黑马程序员---Java基础--24天(网络编程之二)

---------------------- android培训、java培训、期待与您交流! ------------------ 1.网络编程(TCP-上传图片) /* 需求:上传图片。...

黑马程序员——Java 网络编程学习

网络编程的核心是IP、端口、协议三大元素 网络编程的本质是进程间通信 网络编程的2个主要问题:1是定位主机,2是数据传输...

黑马程序员_Java基础_网络编程(下)_24

------- android培训、java培训、期待与您交流!----------   导读:TCP上传图片,TCP-客户并发登陆,浏览器客户端-自定义服务端,浏览器客户端-Tomcat服务端,自定...

黑马程序员_JAVA学习之网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员------java基础----网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 网络编程=网络+IO 网络模型: OSI七层模型:物理层    数据链路层   网络层    ...

黑马程序员-Java网络编程学习总结

1、IP地址  在互联网上每一台计算机都有唯一的表示自己的标记,这个标记就是IP地址,IP地址是使用32位长度的二进制数据表示如:192.168.1.103。2.TCP协议和UDP协议的区别TCP协议...

黑马程序员Java学习笔记之网络编程

一、网络:将不同区域的计算机连接到一起(局域网、城域网、互联网) 二、地址:IP地址,确定网络上的绝对位置          相关Java类: InetAddress         操作方法: ...

Java基础---网络编程 (黑马程序员)

1、网络模型:OSI参考模型和TCP/IP参考模型 图示:         一般来说开发处于传输层和网际层,应用层为:FTP和HTTP协议等,传输层为:UDP和TCP等,网际层为:IP。  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【黑马程序员】java中--------------------网络编程二
举报原因:
原因补充:

(最多只允许输入30个字)