Java Tcp 字符发送

 
import java.io.*;
import java.net.*;
public class TcpClient {

	public static void main(String args[]) throws Exception 
	{
		Socket s = new Socket("172.16.215.105",2221);//定义客户端sorket
		
		//向服务端发送数据
		BufferedWriter bufwriter = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		String line = null;
		
		BufferedReader bufReader = new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		BufferedReader reader  = new BufferedReader(new InputStreamReader(System.in));//从键盘读取数据
		
		while((line = reader.readLine())!=null)
		{
			if(line.equals("over"))
				break;
			bufwriter.write(line);//向服务端发送数据
			bufwriter.newLine();
			bufwriter.flush();
			//下面开妈读取服务端发来的数据
			String reString = bufReader.readLine();
			System.out.println(reString);
		}
	}
}
/*				
 * 				些例子的需求是将一行字符发送到服务端,然后由服务端将其转换成大写的再返回过来
 * 				在这个例子操作中往往会引起无等待,因此我们要从下面几个原因分析
 * 				1.因为些过程操作的是字符,所以我们在字符的传输过程自然要用到 字符流,为了提交效率,我们再加入缓冲
 * 					这个过程中往往会出错误:字符流的 write 一般都是写入到了缓冲区内,如果我们忘了 flush ,则将会引起
 * 					无故的等待,因此在操作字符流的时候,一定不要忘了 flush ,无论是客户端的write 还是服务端的write 
 * 				2. 我们在从键盘读取数据的时候是以一行为标准来读取的,readerLine() 是读取换行符以前的内容,所以
 * 					我们在对数据发送时,我们只是发送了换行符以前的内容,下面看我们的服务端的读取,它是以readLine()
 * 					读取的,而我们在发送的时候,并没有将换行发送来过,所以在读取的时候,会造成等待
 * 				解决的办法就是在发达数据的时候,我们要把换行符也一直发送过来,利用 bufferedReader 中的 newLine
 * 
 * 				或者我们还可以用更为省力的 PrintStream 来操作,它有自动刷新和换行的功能,正好解决了上面的问题
 * 				
 * 				总之上面的问题在两个方面:
 * 							1.字符流发送之前要刷新
 * 							2.以换行读取内容时,在发送前不要忘了把换行也发送出去
 * 				
 * 
 * 
 * 
 * */
import java.io.*;
import java.net.*;
public class TcpServer {

	public static void main(String args[]) throws Exception 
	{
		
		ServerSocket server = new ServerSocket(2221);
		
		Socket s = server.accept();
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+" is connecting....");
		BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		
		String line = null;
		while((line = reader.readLine())!=null)
		{
			
			line = line.toUpperCase();
			writer.write(line);
			writer.newLine();
			writer.flush();
		}
		
		
	}
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值