Java网络编程TCP程序,服务器和客户机交互流程以及基本操作步骤。

1.什么是网络编程

  网络编程其实就是实现两个计算机的数据交换(交互)。

  可以通过直接或间接的通过网络协议与其他的计算机进行通讯。(HTTP协议,TCP/IP协议等)

2.Tcp网络编程的实现流程

  主要分为服务器端(Server)和客户端(Client)。

  通过这个图我们其实就可以了解了实现服务器和客户机交互过程是怎么样的了。

  实现这些原理最重要的是Socket类也叫做套接字。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

服务器端

1.首先创建ServerSocket对象并且设置与外界通讯的端口号,这样就建立了一个可以供其它计算机访问的端口了(这里端口号是可以随便取得但是是在1024~65535之间,因为0~1023被预先通讯的服务占用(比如http占用80端口,telnet占用了23端口等))。

  ServerSocket servesocket = new ServerSocket(2222);

  

2.然后调用accept()方法,监听连接请求,如果客户端请求连接,则接受链接,并且返回通信套接字(Socket)。

  Socket socket = serversocket.accept()

3.获取输入输出流

  获取socket的输入流

  BufferedReader br = new BufferedReader(new getInputSteamReader(socket.getInputStream()))

  获取socket的输出流

  PrintWriter out = new PerintWriter(socket.getOutputStream())

  

4.最后就是关闭Scoket

  socket.close()

客户端

1.创建socket对象,并实现socket的有参构造方法,输入ip地址和端口号 (这里的address就是IP地址,port就是端口号)

  Socket socket = new Socket(InetAddress address,int port)

2.获取Socket的输入输出流

  获取socket的输入流

  BufferedReader br = new BufferedReader(new getInputSteamReader(socket.getInputStream()))

  获取socket的输出流

  PrintWriter out = new PerintWriter(socket.getOutputStream())

3.关闭Socket

  socket.close()

上面就是实现服务器端和客户端交互的主要流程下面我们来看一下具体实例:

服务器端

 1     public static void Server(){
 2         try {
 3             //创建ServerSocket对象并且定义连接端口
 4             ServerSocket serversocket = new ServerSocket(2222);
 5             //实现连接监听
 6             Socket socket = serversocket.accept();
 7             //获取socket输出流
 8             BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 9             //获取socket输入流
10             PrintWriter out = new PrintWriter(socket.getOutputStream());
11             //通过输出流获取客户端传来的信息
12             String str=br.readLine();
13             //输出信息
14             System.out.println(str);
15
16             //通过输入流向客户端发送信息
17             out.write("成功收到客户端传递的信息");
18             //刷新写入
19             out.flush();
20
21             //关闭输出流
22             br.close();
23             //关闭输入流
24             out.close();
25             //关闭serversocket
26             serversocket.close();
27         } catch (IOException e) {
28             // TODO Auto-generated catch block
29             e.printStackTrace();
30         }
31     }
32
33     public static void main(String[] args) {
34         Server();
35     }

客户端

 1 public static void Clien(){
 2         try {
 3             //创建socket对象并写入ip地址和端口号(这里是可以通过手动写入的,我这里写的是最简单的之交互一次的例子)
 4             Socket socket = new Socket("192.168.0.102",2222);
 5             //获取输入流
 6             PrintWriter out = new PrintWriter(socket.getOutputStream());
 7             BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 8             //读取从控制台输入的信息
 9             BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
10             //获取控制台输入的信息
11             String str=in.readLine();
12             //将控制台中的信息写入
13             out.write(str);
14             //刷新写入
15             out.flush();
16             //关闭输入流(这里用shutdown是只关闭输入流这一个流,如果不关闭则会无限次写,客户端和服务端卡死,无法进行下一步动作)
17             //如果是用out.close();是会把socket这个对象的流给关闭,等到下面需要读取客户端信息的时候就会显示socket closed的错误。
18             socket.shutdownOutput();
19
20             //获取服务器端传来的信息
21             String serverstr=br.readLine();
22             System.out.println(serverstr);
23             //关闭
24             br.close();
25             socket.close();
26         } catch (UnknownHostException e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         } catch (IOException e) {
30             // TODO Auto-generated catch block
31             e.printStackTrace();
32         }
33     }
34
35     public static void main(String[] args) {
36         Clien();
37     }

我这里写的只是服务器和客户机的一次交互的最简单的操作。

如果想要实现一直在交互,直到输入某个字符后退出交互,可以使用循环。

 1 while(true){
 2     String str = br.readLine();
 3     System.out.println(str);
 4
 5     out.write("成功收到客户端传递的信息");
 6     out.flush();
 7     if(str.equals("end")){
 8        break
 9     }
10 }

上面是服务器端的循环交互的代码。客户端差不多,我就不写了

最后总结一下:实现交互的流程

1.创建socket对象(服务端创建Serversocket对象,并且监听)

2.获取输入输出流

3.关闭

其实主要就是这三点,如果想进行更复杂的交互,则可以在输入输出中继续添加即可

时间: 2024-11-07 16:38:32

Java网络编程TCP程序,服务器和客户机交互流程以及基本操作步骤。的相关文章

Java网络编程(TCP协议-服务端和客户端交互)

客户端: 1 package WebProgramingDemo; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.Socket; 7 import java.net.UnknownHostException; 8 9 public class SocketDemo { 10 11 /** 12 * @param args

JAVA网络编程-----tcp

java采用TCP传输时利用Socket和ServerSocket Socket和ServerSocket 建立客户端和服务端 建立连接后,通过Socket中的IO流进行数据的传输. 关闭Socket 同样,客户端与服务端是两个独立的应用程序. 演示tcp传输 1.   tcp分客户端和服务端 2.   客户端对应的对象是Socket,服务端对应的对象是ServerSocket. 客户端: 通过查阅socket对象,发现在该对象建立时,就可以连接指定主机, 因为tcp是面向连接的,所以在建立so

如何用Java编写一个简单的服务器和客户机

今天我要向大家介绍的是自己编写的一个比较简单的服务器和客户机程序,注意一下哦,比较简单.好了,闲话休提,砸门直入主题. 小编先从客户机和服务器的模型开始讲解.简单来说,我们实现的这种模型呢,我们每一个用户称为一个客户机,用户之间的通信之间需要一个中转,所有客户机的通信都依托于这个中转,很明显,这个中转,就是砸门的服务器了.整个模型比较简单明了,那么,接下来我们就直接进入实现阶段. 我们从实现服务器开始.Java提供了这样的一个类,ServerSocket.我们通过实例化它的方式来创建一个服务器.

网络编程-TCP程序实例(只是发送了数据,在服务器显示)

package com.yyq; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; /* * tcp传输 * 1,tcp分为客户端和服务端 * 2,客户端对应的对象是socket * 服务器端对性的对象是serversocket */ /* * 客户端

java 网络编程 TCP协议 java 服务器和客户端 java socket编程

一个 HelloWord 级别的 Java Socket 通信的例子.通讯过程:        先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求.然后运行 Client 端,客户端发出连接请求,服务端监听到这次请求后向客户端发回接受消息,连接建立,启动一个线程去处理这次请求,然后继续死循环监听其他请求.客户端输入字符串后按回车键,向服务器发送数据.服务器读取数据后回复客户端数据.这次请求处理完毕,启动的线程消亡.如果客户端接收到 "OK" 之外的返回数据,会再次

Linux网络编程——tcp并发服务器(poll实现)

想详细彻底地了解poll或看懂下面的代码请参考<Linux网络编程--I/O复用之poll函数> 代码: #include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/select.h> #include <sys/time.h> #include <sys/socket.h> #incl

Linux网络编程——tcp并发服务器(多进程)

一.tcp并发服务器概述 一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求).并发服务器设计技术一般有:多进程服务器.多线程服务器.I/O复用服务器等. 二.多进程并发服务器 在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器.多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求.父进程继续等待其它客户的请求.这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中.对于一个 TCP 服务器,客户与服务器的连接可能并不

Linux网络编程——tcp并发服务器(多线程)

tcp多线程并发服务器 多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建.据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为"轻量级"进程.线程与进程不同的是:一个进程内的所有线程共享相同的全局内存.全局变量等信息,这种机制又带来了同步问题. tcp多线程并发服务器框架: 我们在使用多线程并发服务器时,直接使用以上框架,我们仅仅修改client_fun()里面的内容. 代码示例: #

JAVA网络编程TCP通信

Socket简介: Socket称为"套接字",描述IP地址和端口.在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端口上,不同的端口对应于不同的服务.Socket和ServerSocket类位于java.net包中.ServerSocket用于服务端,Socket是建立网络连接时使用的.连接成功时,应用程序两端都会产生一个Socket实例,通过操作这个实例完成所需会话. Socket常用方法: -int getLocalP