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