026.3 网络编程 TCP聊天
2018-10-11 10:02:00来源:博客园 阅读 ()
分为客户端和服务端,分别进行收发操作
##########################################################################
客户端:
###思路:
1、建立tcp客户端服务
1.1因为是面向连接,必须有连接才有通信
1.2在创建客户端时,就必须明确目的地址和端口
2、一旦连接建立,就有了传输数据的通道。就可以在通道中进行数据传输,这个传输是通过流实现的,是socket io流
3、获取socket io中的写动作就可以发送给服务端
###步骤:
1、创建socket对象,明确目的IP和端口
2、通过socket对象的getOutStream方法获取OutputStream对象
3、通过OutputStream对象写数据,实现发送
4、关闭socket对象
###代码: System.out.println("client start"); //1、创建客户端对象,明确目的和端口 Socket s = new Socket("192.168.10.141",10000); //2、获取socket流中的输出流,将数据发送给服务端 OutputStream out = s.getOutputStream(); //3、通过输出流写数据 out.write("I miss you".getBytes()); //4、关闭资源 s.close();
####################################################################
服务端:
###思路:
1、创建socket服务器端服务。服务器监听一个端口
2、获取客户端对象
3、获取客户端的socket流的读取流
4、显示
###步骤:
1、创建ServerSocket服务器对象
2、通过ServerSocket对象的accept方法,获取客户端socket对象
3、通过客户端socket对象的getInetAddress().getHostAddress() 方法获取ip对象然后获取ip
4、通过客户端socket对象的getInputStream方法获取InputStream对象
5、通过InputStream对象的read方法获取客户端发送的数据。
6、关闭客户端socket对象。
###代码: System.out.println("服务器启动。。。"); //1、创建服务器端对象 ServerSocket ss = new ServerSocket(10003); //2、获取客户端对象 Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"...connect"); //3、通过客户端对象获取socket流的读取流 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String str = new String(buf,0,len); System.out.println(str); s.close();
################################################################################
简单互动的TCP通讯
/*### * 案例二:实现客户端和服务端的收发过程。 * 客户端 */ System.out.println("客户端2 启动......."); // 创建客户端socket对象。明确服务端地址和端口。 Socket s = new Socket("192.168.1.223", 10004); // 发送数据,通过socket输出流完成。 OutputStream out = s.getOutputStream(); out.write("服务端,我来了".getBytes()); // 读取服务端返回的数据,通过socket输入流 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf,0,len); System.out.println(text); // 关闭资源。 s.close();
/*### * 案例二:实现客户端和服务端的收发过程。 服务器端。 */ System.out.println("服务端2启动....."); // 创建tcp服务端socket 明确端口。 ServerSocket ss = new ServerSocket(10004); while (true) { // 获取客户端对象。 Socket s = ss.accept(); System.out.println(s.getInetAddress().getHostAddress() + ".....connected"); // 读取客户端的发送过来的数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf, 0, len); System.out.println(text); // 给客户端回馈数据。 OutputStream out = s.getOutputStream(); out.write("客户端,我已到收到,哦耶!".getBytes()); // 关闭客户端 s.close(); } // 关闭服务端。如果不断的获取客户端,不用关闭服务端。 // ss.close();
###########################################################################
我想写一个可以多次发送信息的程序,没有找到哪里错了
public class TCPServer2 { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(10005); Socket s = ss.accept(); ServerReceive sr = new ServerReceive(s); ServerSend ssend = new ServerSend(s); new Thread(sr).start(); new Thread(ssend).start(); } } class ServerSend implements Runnable{ private Socket s; private OutputStream os; public ServerSend(Socket s) throws IOException { super(); this.s = s; os = s.getOutputStream(); } @Override public void run() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = null; try { while((line = br.readLine()) != null){ os.write(line.getBytes()); if("//over".equals(line)){ break; } } s.close(); } catch (IOException e) { } } } class ServerReceive implements Runnable{ private Socket s; private InputStream is; public ServerReceive(Socket s) throws IOException { super(); this.s = s; is = s.getInputStream(); } @Override public void run() { while(true){ byte[] buf = new byte[1024]; try { int len = is.read(buf); String str = new String(buf,0,len); if("//over".equals(str)){ break; } System.out.println(str); s.close(); } catch (IOException e) { } } } }
public class TCPClient2 { public static void main(String[] args) throws UnknownHostException, IOException { Socket bothSocket = new Socket("127.0.0.1",10005); Send2 send = new Send2(bothSocket); Receive2 receive = new Receive2(bothSocket); new Thread(send).start(); new Thread(receive).start(); } } //创建发送和接收的类,使用多线程,继承runnable接口 //多线程发送类 class Send2 implements Runnable{ private Socket s; OutputStream os; public Send2(Socket s) throws IOException { super(); this.s = s; os = s.getOutputStream(); } @Override public void run() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = null; try { while((line = br.readLine()) != null){ os.write(line.getBytes()); if("//over".equals(line)){ break; } } s.close(); } catch (IOException e) { } } } //多线程接收类 class Receive2 implements Runnable{ private Socket s; private InputStream is; public Receive2(Socket s) throws IOException { super(); this.s = s; } @Override public void run() { while(true){ byte[] buf = new byte[1024]; try { is = s.getInputStream(); int len = is.read(buf); String str = new String(buf,0,len); if("//over".equals(str)){ break; } System.out.println(str); s.close(); } catch (IOException e) { } } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 学习笔记之网络编程 2020-06-01
- 网络编程杂谈之TCP协议 2020-05-27
- 抢头条offer机会,抖音面试题:网络编程Socket+数据同步+Red 2020-05-12
- 为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢? 2020-05-06
- 懵圈了,面试官问一个 TCP 连接可发多少个 HTTP 请求? 2020-04-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash