网络编程-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(); } }