网络编程-Tcp通信

网络编程-Tcp通信


<pre class="java" name="code">//结束标记是个坑
//上传文件时 需要加入文件结束标记  socket.shutdownOutput;
//package com.it.www;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;


class SendClient {

	// 主函数抛出异常
	public static void main(String[] args) throws Exception {

		// 192.168.1.103
		Socket socket = new Socket("127.0.0.1", 10023);
	
		// 创建输入流,并把输入流打包进缓存区,能键盘输入
		BufferedReader bufferedReader = new BufferedReader(
				new InputStreamReader(System.in));
		//上传xxx.xxx文件
		BufferedReader bufferedReader2 = 
				new BufferedReader(new FileReader("xxx.xxx"));//当前同本程序目录中的文件

		// 获得客户端socket的输出流,并打包进缓存区
		//共两种方式 bufferedReader 和 printWriter
		//1.bufferedReader
		//BufferedWriter bufferedWriter = new BufferedWriter(
				//new OutputStreamWriter(socket.getOutputStream()));
		//2.PrintWriter
		PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
						
		// 定义socket读取流,读取服务端返回的信息
	     BufferedReader bufferedReaderIn = new BufferedReader(
				new InputStreamReader(socket.getInputStream()));
		
		// 键盘读入数据    读取时记住添加结束标记
		String dataString = null;
		while ((dataString = bufferedReader.readLine()) != null)
		{
			if ("over".equals(dataString))
				break;
			printWriter.println(dataString);
			/*bufferedWriter.write(dataString);
			bufferedWriter.newLine();//加上结束标记,能使服务器接收时识别,并知道了此行已经结束
			bufferedWriter.flush();*/
			//每输入一行,则获取服务器端反馈的信息
			System.out.println("服务器说: " + dataString + "的大写为 "
					+ bufferedReaderIn.readLine());
		}
		
		bufferedReader.close();
		socket.close();//结束时,向输出流发送-1,然后服务端接收到也会接收。
	}

}
		

class Server {

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

		ServerSocket serverSocket = new ServerSocket(10023);
		Socket socket = serverSocket.accept();
		
		//获取发送端的ip
		String ip = socket.getInetAddress().getHostName();
		System.out.println(ip+"  ................................connected");
		//获取socket的读取流中的数据
		BufferedReader bufferedReaderIn = 
				new BufferedReader(new InputStreamReader(socket.getInputStream()));
		
		//在服务器中创建文件xxxx.xxxx
		PrintWriter out = new PrintWriter(new FileWriter("xxxx.xxxx"),true);
		
		
		// 获取socket输出流
		//BufferedWriter bufferedWriterOut = 
				//new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
		PrintWriter printWriter = 
				new PrintWriter(socket.getOutputStream(),true);
		
		String dataString = null;
		while((dataString = bufferedReaderIn.readLine())!=null)
		{
			System.out.println(ip+"发过来的数据为  "+dataString );
			printWriter.println(dataString.toUpperCase());
			//bufferedWriterOut.write(dataString.toUpperCase());
			//bufferedWriterOut.newLine();//结束标记,使客户端认识到此行已经结束,防止等待
			//bufferedWriterOut.flush();//刷新缓存区数据,数据发送,必须加上
		}
		socket.close();
		serverSocket.close();
	}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值