黑马程序员_java高级篇网络编程TCP实战Day8(上)

原创 2013年12月05日 08:57:09

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


                                          黑马程序员_java高级篇网络编程TCP实战Day8(上)


(小点补充:当我们把ip:192.168.1.255,就会实现广播)

 

TCP的开发模式与UDP有区别,UDP分为发送端与接收端,但TCP分为客户端与服务端

,这里列出简单的TCP原理实现,与客户端上传文本。

 

(一)  简单的TCP原理实现

 

步骤:

客户端

//1,创建客户端socket,并指定要连接的主机和端口
       Socket socket=new Socket("192.168.1.100",10005);
       //为了发送数据建立输出流
//2    OutputStream out=socket.getOutputStream();
//3    out.write("abc".getBytes());
       //socket关闭后,流也关闭
//4    socket.close();


 

第一步相当于把买一根的管道,第二步,相当于把这个管道接通,来传输水,第三步开始传输水,第四部,传完以后,关闭闸门。

 

 

 

服务端

   

 //1,建立服务端的Sersocket,并监听
       ServerSocket s=new ServerSocket(10005);
       //2,获取客户端socket对象
       Socket socket=s.accept();
       //获取客户端发过来的数据,用客户发过来的流对象读取
       InputStream in=socket.getInputStream();
       byte[] b=newbyte[1024];
        int len=in.read(b);
        System.out.println(new String(b,0,len));
       System.out.println("您的IP:"+s.getInetAddress().getHostAddress());
       s.close();

 

(二)简单的自行输入文本,注意流的关闭位置,其实原理不变,就是把我们原来写好的字符改成输入流,通过读取来实习。

 

 

客户端

package 网络编程;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Scoktcp {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		//1,建立服务,s相当于建好的大道
		Socket s=new Socket("192.168.1.100",10007);
		
		//我们走大道,调用流
		//OutputStream os1=s.getOutputStream();
		
		//定义读取键盘的流对象
		BufferedReader br=new BufferedReader( new InputStreamReader(System.in));
		
		//建立输出对象
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		
		
		String str="";
		BufferedReader bur=new BufferedReader(new InputStreamReader(s.getInputStream()));
		while((str=br.readLine())!=null)
		{
			
			 bw.write(str);
			 bw.newLine();
			 bw.flush();
	
		String str2=bur.readLine();
			    
			  // int len= is.read(b);
			  System.out.println("ser:"+str2);
				
			
		}

//
		bw.close();
		s.close();
		
	
		
	
		
	}

}

服务端

package 网络编程;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SerSockettcp {

	/**
	 * @param args
	 * 需求:客户端给服务端发送数据,服务端收到后,给客户端返回
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		//1,建立服务端的socket,并监听

		ServerSocket ss=new ServerSocket(10010);
		Socket s=ss.accept();
		//建立输出对象
		
		
		
		String str="";
		BufferedReader bur=new BufferedReader(new InputStreamReader(s.getInputStream()));
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		while((str=bur.readLine())!=null)
		{
			
		//2,获取客户端socket对象
		  
		
		
		//获取客户端发过来的数据,用客户发过来的流对象读取
	  bw.write(str);
	  bw.newLine();
	  bw.flush();
	   }
		bur.close();
		bw.close();
		ss.close();
	  
	  // os.close();e
		
	
		
		
	}

}

效果图:





(三)  文本上传,文本上传中,怎样去实现结束,通过在客户端加上一个s.shutdownOutput();//关闭客户端的输出流相当于给流加上一个结束标记。这个标记可以自行定义。如我发一个over过去,当服务端接收到了over就结束读取,因为我们每一次发过去的数据都是readLine()并不包含结束符。


客户端:

package 网络编程;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class CopyTextClient {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		Socket s=new Socket("192.168.1.100",10009);
		BufferedReader br=new BufferedReader(new FileReader("d:/1.txt"));
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		String str="";
		while((str=br.readLine())!=null)
		{
		   bw.write(str);
		   bw.newLine();
		   bw.flush();
		}
		
//		bw.write("over");
//		bw.newLine();
//		bw.flush();
		
		s.shutdownOutput();//关闭客户端的输出流相当于给流加上一个结束标记
		
		BufferedReader br1=new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		System.out.println(br1.readLine());
		
		
		bw.close();
		s.close();
		
	}

}

服务端:

package 网络编程;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class CopyTextSer {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		
		ServerSocket ss=new ServerSocket(10009);
		Socket s=ss.accept();
		
		BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter( new FileOutputStream("d:/c_1.txt")));
		
		String str="";
		while((str=br.readLine())!=null)
		{
		   bw.write(str);
		   bw.newLine();
		   bw.flush();
		}
		BufferedWriter bw1=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		bw1.write("上传成功!");
		bw1.newLine();
		bw1.flush();
		bw.close();
		br.close();
		ss.close();
		
	}

}

效果图:





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

黑马程序员_java高级篇网络编程TCP实战Day8(下)

黑马程序员_java高级篇网络编程TCP实战Day8(下)   这个个博客中将涉及到TCP的简单的图片上传, 图片的并发上传 , 客户端并发登陆.   (一)图片上传   图片上传像网络编程TCP实...
  • wohenai791515672
  • wohenai791515672
  • 2013年12月06日 12:03
  • 849

黑马程序员——网络编程(Socket)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  • bxy19921025
  • bxy19921025
  • 2015年01月30日 16:56
  • 378

黑马程序员——网络爬虫

------- android培训、java培训、期待与您交流! ----------
  • yonggandeyangguang
  • yonggandeyangguang
  • 2014年09月24日 12:14
  • 218

黑马程序员——Java基础测试题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员——Java基础测试题 第1题:以下代码哪个是正确的?为什么?   a. byte...
  • liu007004
  • liu007004
  • 2015年01月16日 12:49
  • 1371

Java多线程编程实战指南(核心篇)读书笔记(四)

Java多线程编程实战指南(核心篇)读书笔记:第七章和第八章
  • qq_25827845
  • qq_25827845
  • 2017年08月04日 17:39
  • 1732

【新闻】本人新书《Java多线程编程实战指南(核心篇)》已出版上市

豆瓣主页https://book.douban.com/subject/27034721/购买链接京东:https://item.jd.com/12184434.html亚马逊: https://ww...
  • viscent_huang
  • viscent_huang
  • 2017年05月17日 21:07
  • 2432

黑马程序员-java就业面试题大全(持续更新)

1、一个"java"源文件中是否可以包含多个类()?
  • zj3911507
  • zj3911507
  • 2014年06月20日 16:32
  • 1906

黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1520

《Java多线程编程实战指南(设计模式篇)》答疑总结(陆续更新)

博客分类: 《Java多线程编程实战指南(设计模式篇)》答疑开展以来,不少网友提出的问题既有与本书有关的话题,也有Java多线程编程基础知识的相关话题。由于时间关系,对于重复的问题我...
  • dotedy
  • dotedy
  • 2015年11月27日 14:03
  • 830

黑马程序员_java多线程的一些总结(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、    进程和线程 1、   进程和线程的关系。 一般来说,我们运行一个应用程序的,就启动...
  • u011449569
  • u011449569
  • 2015年10月29日 00:23
  • 285
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员_java高级篇网络编程TCP实战Day8(上)
举报原因:
原因补充:

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