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

时间: 2024-11-13 06:50:29

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

React-Native做一个文本输入框组件

我又回来啦! 由于最近一直在做公司的项目,而且比较急.如今项目已经迭代到第三期,可以缓一缓了... 今天在公司里听前端的说,这个项目本来是用React-Native做的(去年10月份),但是做到一半发现坑太多,就中途放弃了,于是让我们android和iOS重新开发... 作为非常喜欢这个技术的我来说,表示相当的不服. 于是我打算利用闲暇时间做一个一模一样的出来,反正接口我都有(嘻嘻) 说实话,最近一直再用android做开发,而且时间也不宽裕,react-native有点生疏了. 好了,废话不多

java网络编程TCP传输—流操作—服务端反馈与客户端接收

在读取完流后,服务端会向客户端返回一些数据,告诉客户端,已经写完了. 在这里和”流操作—拿到源后的写入动作“差不多,客户端同样以byte与Buffered两种缓冲读取作为例子,同时,.也是希望大家给补充. 1.利用OutputStream向客户端回写,客户端用byte作为缓冲接收 向客户端回写: 1 //获取socket输出流,将上传成功字样传给客户端 2 OutputStream out=s.getOutputStream(); 3 out.write("上传成功".getBytes

利用python+tkinter做一个简单的智能电视遥控器

要通过python实现遥控器功能分两步: 第一步:开发图形化界面 第二步:使PC端给电视发送相应指令 现在就开始第一步操作实现遥控器功能,python2输入以下代码 注意:python3需要将代码中的from Tkinter import * 替换为from tkinter import * 将from SimpleDialog import * 替换为import tkinter.simpledialog #coding=utf-8from Tkinter import * from Simp

python小练习,利用dict,做一个简单的登录。

'''利用字典实现登录'''users=[{'username':'jerry','pwd':'123456'},{'username':'tom','pwd':'1'}] def login(username,pwd): print(username,pwd) if(username==''or pwd==''): return 0 else: isbool=True for dict1 in users: if (dict1['username']==username and dict1['

利用CSS布局做一个简单的荣誉证书

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style type="text/css"> body{ background-image: url(../pic/125.jpg); background-repeat: no-repeat; background-size: 700px 500px; } .f1{ font-family: san

利用shell脚本做一个用户登录系统

效果图如下: #!/bin/bash# while truedocat << EOF//======================\\\\| 用户登录系统 |--------------------------| 1.创建用户 || 2.删除用户 || 3.锁定用户 || 4.解锁用户 || 5.查看用户 || 6.退出脚本 |--------------------------EOF read -p "请输入你的操作选择:" num#输入为1时的判断if [ "

如何做一个富文本编辑器

很久以前就想做一个富文本编辑器,但是感觉比较难,一直没有实现.直到了解了html5的contenteditable属性可以设置一个div为可编辑状态,利用这个特性做富文本编辑器就比较简单了 首先 认识一下 contenteditable 它是一个属性 可以这样使一个DIV的编辑状态被激活 <div contenteditable="true"></div> 然后这个div就可以被编辑了 而我们要想获得它的html源码可以使用innerHTML来取得 举个例子如下

Android基础入门教程——7.6.3 基于TCP协议的Socket通信(2)

Android基础入门教程--7.6.3 基于TCP协议的Socket通信(2) 标签(空格分隔): Android基础入门教程 本节引言: 上节中我们给大家接触了Socket的一些基本概念以及使用方法,然后写了一个小猪简易聊天室的 Demo,相信大家对Socket有了初步的掌握,本节我们来学习下使用Socket来实现大文件的断点续传! 这里讲解的是别人写好的一个Socket上传大文件的例子,不要求我们自己可以写出来,需要的时候会用 就好! 1.运行效果图: 1.先把我们编写好的Socket服务

使用node.js做一个自用的天气插件

var request = require('request') var url = 'http://www.baidu.com/home/xman/data/superload' var cookie = '你登录百度后的cookie' var options = { method: "GET", url: url, qs: { "type": "weather", "asyn": 1, "t": new