TCP通讯协议的应用

TCP通讯协议的应用

创建服务器,可以多客户连接

public static void main(String[] args) {
		//服务器端
		new Thread(new Runnable() {//使用匿名内部类			
			@Override
			public void run() {
			try {//创建服务器,指定端口10001(可以自己指定),客户连接时需要使用相同的端口才能连接
				ServerSocket ss=new ServerSocket(10001);
				while(true){//让服务器一直运行
					Socket s = ss.accept();//获取连接的客户端
					//当客户端连接时,为其创建线程
					new Thread(new Runnable() {						
						@Override
						public void run() {
							Socket ThreadSocket = s;//在线程中创建对象保持当前创建线程时克服的对象
			String ip = ThreadSocket.getInetAddress().getHostAddress();//获取客户IP
                          try {                       	  
          					System.out.println(ip+"已连接");
          					//调用读取数据方法
          				InputStream is = ThreadSocket.getInputStream();
          					byte b[]=new byte[1024];
          					int len=0;
          					while((len=is.read(b))!=-1){
          					//将收到的数据输出到控制台
          						System.out.println(new String(b,0,len));
          					}
          					ThreadSocket.close();//关闭客服端          												
						} catch (Exception e) {
							e.printStackTrace();
						}							
						}
					}).start();
				}			
			} catch (Exception e) {
			e.printStackTrace();
			}				
			}
		}).start();
		}

建立客户端的Socket服务

public static void main(String[] args) throws Exception, IOException {
	// 1:建立客户端的Socket服务,并明确要连接的服务器地址,端口
			Socket s = new Socket("172.16.1.100", 10001);
			// 2:如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.
			// 3:通过Socket对象的方法,可以获取这两个流
			OutputStream os = s.getOutputStream();
			// 4:通过流的对象可以对数据进行传输
			OutputStream os = s.getOutputStream();
					os.write("111".getBytes());
			// 5:如果传输数据完毕,关闭资源
			os.flush();
			os.close();
			s.close();
}

建立客户端的Socket服务,发送文件

public static void main(String[] args) throws Exception, IOException {
			Socket s = new Socket("172.16.1.139", 10000);
			OutputStream os = s.getOutputStream();
			File f=new File("D://test/shz.txt");
			FileInputStream fis=new FileInputStream(f);
			//使用字节高效流进行读取
			BufferedInputStream bis=new BufferedInputStream(fis);
			byte[]b=new byte[1024];//创建读取字节的数组
			int len=0;
			while((len=bis.read(b))!=-1){
				os.write(b,0,len);
			}
			os.flush();
			os.close();
			s.close();
}

创建服务器一直保持开启状态,可多人连接,将接收到的数据保存至指定文件中

	public static void main(String[] args) {
		//服务器端
		new Thread(new Runnable() {	//使用匿名内部类		
			@Override
			public void run() {
			try {
				ServerSocket ss=new ServerSocket(10001);
				while(true){
					Socket s = ss.accept();//获取连接的客户端
					//当客户端连接时,为其创建线程
					new Thread(new Runnable() {						
						@Override
						public void run() {
							Socket ThreadSocket = s;//在线程中创建对象保持当前创建线程时克服的对象
							String ip = ThreadSocket.getInetAddress().getHostAddress();//获取客户IP
                          try {                        	  
          					System.out.println(ip+"已连接");
          					InputStream is = ThreadSocket.getInputStream();
          					byte b[]=new byte[1024];
          					int len=0;
          				    //创建保存的文件对象,以时间命名
          					File f=new File("D://test/test3",new SimpleDateFormat("HHmmss").format(new Date())+".txt");
          					f.createNewFile();//创建文档
          					FileOutputStream fos=new FileOutputStream(f);
          					BufferedOutputStream bos=new BufferedOutputStream(fos);          					
          					while((len=is.read(b))!=-1){
          						bos.write(b,0,len);
          					}
          					bos.flush();
          					bos.close();
          					ThreadSocket.close();//关闭客户端
          					} catch (Exception e) {
							e.printStackTrace();
						}							
						}
					}).start();
				}			
			} catch (Exception e) {				
				e.printStackTrace();
			}
			}
		}).start();
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值