TCP传输:利用socket服务做一个文本转换器

转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/45665291


最近看了一个教学视频,学习socket编程,里面有一个例子感觉写的不错,我就在此整理一下,帮助我回忆,查看。


需求:文本转换器,

客户端给服务端发送一些字母,服务端会将文本转换成大写返回给客户端。

并且客户端可以无限制的进行文本转换,当客户端输入“over”时,转换结束。


效果图如图所示:

客户端:


服务端:



关于dos窗口,运行java,你可以看这个文章http://blog.csdn.net/harryweasley/article/details/45559129

分析:
客户端:
既然是操作设备上的数据,那么就可以使用io技术,并按照io的操作规律来思考。
源:键盘录入。
目的:网络设备,网络输出流。
而且操作的是文本数据。可以选择字符流。


步骤
1,建立服务。
2,获取键盘录入。
3,将数据发给服务端。
4,获取服务端返回的大写数据。
5,结束,关资源。


都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲。


下面是客户端代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TransClien {

	/**
	 * @param args
	 * @throws IOException
	 * @throws UnknownHostException
	 */
	public static void main(String[] args) throws Exception {
		//创建客户端的socket,指定目的主机和端口
		Socket s = new Socket("192.168.1.48", 10005);
		//定义读取键盘数据的流对象。
		BufferedReader bufr = 
			new BufferedReader(new InputStreamReader(System.in));


		//定义目的,将数据写入到socket输出流。发给服务端。
		//BufferedWriter bufOut = 
			//new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);



		//定义一个socket读取流,读取服务端返回的大写信息。
		BufferedReader bufIn = 
			new BufferedReader(new InputStreamReader(s.getInputStream()));

		String line = null;
		
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;
			
			out.println(line);
//			bufOut.write(line);
//			bufOut.newLine();
//			bufOut.flush();

			String str =bufIn.readLine();
			System.out.println("server:"+str);
			
		}

		bufr.close();
		s.close();

	}

}


服务端:
源:socket读取流。
目的:socket输出流。
都是文本,装饰。


下面是服务端代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TransServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		//建立socket服务,并监听端口
		ServerSocket ss = new ServerSocket(10005);
		
		Socket s = ss.accept();
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip + "....connected");

		// 读取socket读取流中的数据。
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(
				s.getInputStream()));

		// 目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。
		// BufferedWriter bufOut =
		// new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

		PrintWriter out = new PrintWriter(s.getOutputStream(), true);

		String line = null;
		while ((line = bufIn.readLine()) != null) {

			System.out.println(line);

			out.println(line.toUpperCase());
			// bufOut.write(line.toUpperCase());
			// bufOut.newLine();
			// bufOut.flush();
		}

		s.close();
		ss.close();
	}

}

注意:客户端和服务端那里注释的4行代码,是利用缓冲流做的,用PrintWriter步骤会少一些,这两种方法都是可以的。


关于udp传输,你可以查看这篇文章http://blog.csdn.net/harryweasley/article/details/45665309


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值