黑马程序员技术交流社区
标题:
关于TCP协议
[打印本页]
作者:
帮助信息
时间:
2015-11-30 00:56
标题:
关于TCP协议
/*
* 第十题:
使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) throws Exception {
Socket s = null; //实例化一个socket方法
try {
s = new Socket(InetAddress.getLocalHost(), 10010);//主机地址
BufferedReader client_buf = new BufferedReader( //缓冲字节流读取文件
new InputStreamReader(s.getInputStream()));//!!!!!!!!!!!这一步是什么意思!!!!!!!!!!!!!!!!!!!!!
PrintStream pri = new PrintStream(s.getOutputStream());
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.nextLine();
System.out.println("正在向服务器发送数据...");
pri.println(str);
System.out.println("接受来自服务器反转的字符串...");
System.out.println(client_buf.readLine());//打印反转之后对的字符串
} catch (Exception e) {
e.printStackTrace();
} finally { //finally,不论上面是否出现错误,都将执行其中的代码
if (s != null) {
try {
s.close(); //关闭服务
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
复制代码
这只是客户端。 问题是代码中都是感叹号的那个
作者:
kunsongjack
时间:
2015-12-1 01:28
本帖最后由 kunsongjack 于 2015-12-1 01:30 编辑
BufferedReader client_buf = new BufferedReader( new InputStreamReader(s.getInputStream()));
复制代码
这个是一个缓冲字符输入流. new BufferedReader( Reader reader),里面需要一个Reader类对象. new InputStreamReader(InputStream is ) 是一个字节流通向字符流的桥梁,它是一个Reader类. 但是它的参数需要传入一个 InputStream类的对象. s.getInputStream()返回的是一个InputStream类对象.因此将其作为了 参数放进了InputStreamReader类构造参数里面.
作者:
meihua
时间:
2015-12-1 13:06
客户端你也需要接受服务端返回的信息的啊,你没有流就接受不了。这就是接受服务端返回的信息,就是服务端的s.getOutputStream()
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2