java实现一个简答而实际的TCP的服务端和客户端连接

合集下载

Java网络编程之TCP通信完整代码示例

Java网络编程之TCP通信完整代码示例

Java⽹络编程之TCP通信完整代码⽰例⼀、概述 Socket类是Java执⾏客户端TCP操作的基础类,这个类本⾝使⽤代码通过主机操作系统的本地TCP栈进⾏通信。

Socket 类的⽅法会建⽴和销毁连接,设置各种Socket选项。

ServerSocket类是Java执⾏服务器端操作的基础类,该类运⾏于服务器,监听⼊站TCP连接,每个socket服务器监听服务器的某个端⼝,当远程主机的客户端尝试连接此端⼝时,服务器就被唤醒,并返回⼀个表⽰两台主机之间socket的正常Socket对象。

⼆、什么是TCP? TCP是⼀种⾯向连接的、可靠的、基于字节流的传输层通信协议。

TCP通信分为客户端和服务器端,对应的对象是分别是Socket和ServerSocket。

当⼀台计算机需要与另⼀台远程计算机连接时,TCP协议会让他们建⽴⼀个连接:⽤于发送和接收数据的虚拟链路。

TCP协议负责收集信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确的还原。

为了保证数据包在传送中准确⽆误,TCP使⽤了重发机制:当⼀个通信实体发送⼀个消息给另⼀个通信实体后需要收到另⼀个实体的确认信息,如果没有收到确认信息,则会再次重发刚才发送的信息。

三、TCP通信 1、构造函数 Socket类实现客户端套接字,通过构造函数可以指定希望连接的主机和端⼝。

主机可以指定为InetAddress或String,端⼝始终指定为0到65535之间的int值。

Socket s=new Socket("127.0.0.1", 10001);//创建⼀个流套接字并将其连接到指定主机上的指定端⼝号ServerSocket类实现服务器套接字。

服务器套接字等待请求通过⽹络传⼊,它基于该请求执⾏某些操作,然后向请求者返回结果。

ServerSocket ss=new ServerSocket(10001);//创建绑定到特定端⼝的服务器套接字2、例⼦:TCP⽂件复制 客户端:public class ClientDemo{public static void main(String[] args) throws UnknownHostException, IOException{Socket s=new Socket("127.0.0.1", 10004);BufferedReader buf = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\1.txt"));String line=null;/*PrintWriter out=new PrintWriter(s.getOutputStream(),true);while((line=buf.readLine())!=null){out.println(line);}*/BufferedWriter out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));while((line=buf.readLine())!=null){out.write(line);out.newLine();out.flush();}s.shutdownOutput();BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));String str=in.readLine();System.out.println(str);s.close();buf.close();}}服务器端:public class ServerDemo{public static void main(String[] args) throws IOException{ServerSocket ss=new ServerSocket(10004);Socket s=ss.accept();BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));String line=null;/*PrintWriter buf=new PrintWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\2.txt"),true);while((line=in.readLine())!=null){buf.println(line);}*/BufferedWriter buf=new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\2.txt"));while((line=in.readLine())!=null){buf.write(line);buf.newLine();buf.flush();}PrintWriter out=new PrintWriter(s.getOutputStream(),true);out.println("传输成功!");ss.close();buf.close();}}四、Socket在浏览上的应⽤ 我们可以在Eclipse中编写服务器端,然后利⽤浏览器进⾏访问。

java实现tcp连接的接收数据方法

java实现tcp连接的接收数据方法

java实现tcp连接的接收数据方法Java是一种广泛应用于网络编程的编程语言,它提供了丰富的库和工具来实现TCP连接的数据接收。

在本文中,我将介绍如何使用Java实现TCP连接的接收数据方法。

我们需要了解TCP连接的基本概念。

TCP(Transmission Control Protocol)是一种可靠的、面向连接的协议,它在网络上提供了可靠的数据传输服务。

在TCP连接中,客户端和服务器之间建立一个可靠的双向通信通道,通过这个通道可以进行数据的传输和交换。

在Java中,我们可以使用Socket类来实现TCP连接的接收数据。

Socket类提供了一组方法来创建、连接和关闭套接字,以及发送和接收数据。

下面是一个简单的示例代码,展示了如何使用Java实现TCP连接的接收数据方法:```javaimport java.io.InputStream;import .Socket;public class TCPServer {public static void main(String[] args) {try {// 创建一个Socket对象,指定服务器的IP地址和端口号 Socket socket = new Socket("127.0.0.1", 8888);// 获取Socket的输入流InputStream inputStream = socket.getInputStream();// 创建一个缓冲区,用于读取数据byte[] buffer = new byte[1024];// 读取数据,并将其存储到缓冲区中int length = inputStream.read(buffer);// 将字节数组转换为字符串,并输出到控制台String data = new String(buffer, 0, length);System.out.println("接收到的数据:" + data);// 关闭输入流和SocketinputStream.close();socket.close();} catch (Exception e) {e.printStackTrace();}}}```在上面的示例代码中,我们首先创建了一个Socket对象,并指定了服务器的IP地址和端口号。

Java网络编程,实现客户端与服务端的交互

Java网络编程,实现客户端与服务端的交互

在Socket的程序开发中,服务器端使用ServerSocket等待客户端的链接,对于Java的网路程序来讲,每一个客户端使用一个Socket对象表示。

ServerSocketServerSocket类主要用在服务器端程序的开发上,用于接收客户端的链接请求。

Socket在服务器端每次运行时都要使用accept()方法等待客户端连接,此方法执行之后服务器端讲进入阻塞状态,直到客户端连接之后程序才可以向下继续执行,此方法的返回值是Socket,每一个Socket都表示一个客户端对象。

多线程:Java的多线程实现:有两种方式:1.继承Thread类2.实现Runnable接口继承Thread类一个类只要继承了Thread类,此类就称为多线程操作类,在Thread 子类中,必须覆写run()方法,此方法为线程的主体。

BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中。

BufferedReader实例化BufferedReader buf=new BufferedReader(new InputStreamReader(System.in)); InputStreamReader是R eader的子类,将输入的字节流转化为字符流。

对象输出流:ObjectOutputStream对象输入流:ObjectInputStream以下代码实现了服务端与客户端的交互:里面包含了网络编程、线程、流等知识点源代码:Server.java中的代码import java.io.*;import .*;public class Server {ServerSocket server; // 声明ServerSocketpublic Server() {try {server = new ServerSocket(5566); // 构建服务,绑定端口} catch (IOException e) {// TODO自动生成 catch 块e.printStackTrace();}}public void startServer() { //定义startServer方法,由此启动服务ServerThread st = new ServerThread(); //new出一个新线程st.start(); //启动线程}public static void main(String[] args) {Server s1 = new Server(); //用Server类创建一个S1对象,此为对象实例化s1.startServer(); //调用startServer()方法}class ServerThread extends Thread { //继承Thread类public void run() {while (true) {try {System.out.println("开始监听:");Socket formClient = server.accept();ObjectOutputStream oos = new ObjectOutputStream(formClient.getOutputStream());BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入:");String s = buf.readLine();oos.writeObject(s);ObjectInputStream ois = new ObjectInputStream(formClient.getInputStream());String sc = (String) ois.readObject();System.out.println("客户端说:" + sc);Thread.sleep(100);} catch (IOException e) {// TODO自动生成 catch 块e.printStackTrace();} catch (ClassNotFoundException e) {// TODO自动生成 catch 块e.printStackTrace();} catch (InterruptedException e) {// TODO自动生成 catch 块e.printStackTrace();}}}}}Client.java中的代码:import java.io.*;import .*;public class Client {public static void main(String[] args) {while (true) {try {Socket toServer = new Socket(InetAddress.getLocalHost(), 5566);BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));ObjectInputStream ois = new ObjectInputStream(toServer.getInputStream());String s = (String) ois.readObject();System.out.println("服务器端说:" + s);ObjectOutputStream oos = new ObjectOutputStream(toServer.getOutputStream());System.out.println("请输入:");String sc = buf.readLine();oos.writeObject(sc);} catch (UnknownHostException e) {// TODO自动生成 catch 块e.printStackTrace();} catch (IOException e) {// TODO自动生成 catch 块e.printStackTrace();} catch (ClassNotFoundException e) {// TODO自动生成 catch 块e.printStackTrace();}}}}运行说明把Server.java和Client.java两个文件放到同一个文件夹,比如放在F:\网络编程文件夹下。

Java如何通过Socket实现TCP服务端

Java如何通过Socket实现TCP服务端

Java如何通过Socket实现TCP效劳端所谓socket 通常也称作”套接字“,用于描述IP地址和端口,是一个通信链的句柄。

应用程序通常通过”套接字”向网络发出请求或者应答网络请求。

Socket和ServerSocket类库位于包中。

ServerSocket用于效劳器端,Socket是建立网络连接时使用的。

在连接成功时,应用程序两端都会产生一个Socket 实例,操作这个实例,完成所需的会话。

对于一个网络连接来说,套接字是平等的,并没有差异,不因为在效劳器端或在客户端而产生不同级别。

import .io.IOException;import java.io.InputStream;import java.io.OutputStream;import java..ServerSocket;import java..Socket;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/*** TCP效劳器端,单例模式* @author xiang**/public class TCPServer implements Runnable {private static final Logger logger =LoggerFactory.getLogger(TCPServer.class);//成员变量/private static TCPServer serverInstance;private static Map socketMaps = new HashMap();//每个客户端连接时都会新建一个SocketThread与之对应 private static ServerSocket serverSocket; //效劳器套接字private static int serPort = 9999; //效劳器端口号private static boolean flag; //效劳器状态标志private static final int BUFFERSIZE = 512; //数据接收字符数组大小//构造函数/private TCPServer() {}/*** 获取实例* @return TCPServer实例serverInstance*/public static TCPServer getServerInstance(){if(serverInstance==null)serverInstance = new TCPServer();return serverInstance;}/*** 开启效劳器* @throws IOException*/public void openTCPServer() throwsIOException{ if(serverSocket==null ||serverSocket.isClosed()){serverSocket = new ServerSocket(serPort);flag = true;}}/*** 关闭效劳器* @throws IOException*/public void closeTCPServer() throws IOException{flag = false; if(serverSocket!=null)serverSocket.close();/*for (Map.Entry entry : socketMaps.entrySet()) {System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());} */for (SocketThread value : socketMaps.values())value.closeConnect();socketMaps.clear();}/*** 效劳器向客户端发送数据* @param bytes[]:待发送的字符数组* @param key 客户端的key,为空或""时表示数据群发* @throws IOException*/public void sendMessage(String key,byte[] msgBytes){ if(key==null||key.equals("")){for (SocketThread value : socketMaps.values())value.sendMassage(msgBytes);}else{SocketThread thread = socketMaps.get(key);if(thread!=null)thread.sendMassage(msgBytes);}}/*** 效劳器向客户端发送数据* @param key 客户端的key,为空或""时表示数据群发* @param msgStr:待发送的字符串* @throws IOException*/public void sendMessage(String key,StringmsgStr){ byte[] sendByte = msgStr.getBytes();if(key==null||key.equals("")){for (SocketThread value : socketMaps.values())value.sendMassage(sendByte);}else{SocketThread thread = socketMaps.get(key);if(thread!=null)thread.sendMassage(sendByte);}}@Overridepublic void run() {("效劳器线程已经启动"); while(true){try {while(flag){("效劳器线程在监听状态中");Socket socket = serverSocket.aept();String key = socket.getRemoteSocketAddress().toString(); SocketThread thread = new SocketThread(socket,key); thread.start();socketMaps.put(key, thread);("有客户端连接:"+key);}} catch (Exception e) {e.printStackTrace();}}}/*** 处理连接后的数据接收请求内部类* @author xiang**/private class SocketThread extends Thread{ private Socket socket;private String key;private OutputStream out;private InputStream in;//构造函数public SocketThread(Socket socket,String key) { this.socket = socket;this.key = key;}/*** 发送数据* @param bytes* @throws IOException*/public void sendMassage(byte[] bytes){try {if(out==null)out = socket.getOutputStream();out.write(bytes);} catch (Exception e) {e.printStackTrace();try {closeConnect();} catch (IOException e1) {e1.printStackTrace();}socketMaps.remove(key);}}/*** 关闭连接,释放资源* @throws IOException*/public void closeConnect() throws IOException{if(out!=null) out.close();if(in!=null) in.close();if(socket!=null && socket.isConnected()) socket.close(); }@Overridepublic void run() {byte[] receivBuf = new byte[BUFFERSIZE];int recvMsgSize;try {in = socket.getInputStream();out = socket.getOutputStream();while ((recvMsgSize = in.read(receivBuf)) != -1) {String receivedData = new String(receivBuf, 0, recvMsgSize);System.out.println("Reverve form[port" +socket.getPort() + "]:" + receivedData);System.out.println("Now the size of socketMaps is" + socketMaps.size());/********************************************************** ****** 接收数据后的处理过程************************************************************ ***/}// response to clientbyte[] sendByte = "The Server has received".getBytes();// out.write(sendByte, 0, sendByte.length);out.write(sendByte);System.out.println("To Cliect[port:" + socket.getPort() + "] 回复客户端的消息发送成功");closeConnect();socketMaps.remove(key);} catch (Exception e) { e.printStackTrace();try {closeConnect();} catch (IOException e1) { e1.printStackTrace();}}}//////////////public int getport(){ return socket.getPort(); }}//. end SocketThread}。

socket建立tcp连接的java代码

socket建立tcp连接的java代码

socket建立tcp连接的java代码Socket是Java中常用的网络编程类,可以用于建立TCP连接,完成客户端和服务器间的通信。

下面是Socket建立TCP连接的Java代码:1. 建立Socket对象TCP协议在建立连接时,需要同时指定服务器的IP地址和端口号。

因此,在客户端程序中,需要先创建一个Socket对象来指定需要连接的服务器IP地址和端口号。

Socket socket=new Socke t(“192.168.1.1”, 8888);2. 获取输入输出流建立连接之后,客户端可以向服务器发送数据,还可以接收服务器返回的数据。

为了完成这些操作,需要获取输入输出流对象。

InputStream input=socket.getInputStream();OutputStream output=socket.getOutputStream();3. 发送数据客户端想要向服务器发送数据,可以通过输出流对象write()方法实现。

byte[] data=”Hello Server”.getBytes();output.write(data);4. 接收数据客户端从服务器接收数据,可以通过输入流对象read()方法实现。

byte[] buffer=new byte[1024];int len=input.read(buffer);5. 断开连接客户端和服务器通信结束之后,需要关闭连接。

input.close();output.close();socket.close();综上所述,以上代码实现了Socket建立TCP连接的过程,使得客户端和服务器能够互相通信,完成所需的业务操作。

Java程序设计中的TCP通信与聊天室实现案例

Java程序设计中的TCP通信与聊天室实现案例

Java程序设计中的TCP通信与聊天室实现案例在Java程序设计中,TCP通信是一种常见的网络通信协议,它可以实现可靠的、面向连接的数据传输。

而聊天室是一种常见的网络应用,通过TCP通信可以实现多用户之间的实时交流。

本文将介绍Java程序设计中的TCP通信的基本原理以及如何使用Java语言实现一个简单的聊天室。

一、TCP通信的基本原理TCP(Transmission Control Protocol)是一种面向连接的传输层协议,它提供了可靠的数据传输和错误恢复机制。

在TCP通信中,数据传输是通过建立连接、传输数据以及断开连接这些步骤进行的。

具体的流程如下:1. 建立连接:在TCP通信中,需要先建立连接,这一步骤称为“三次握手”。

首先,客户端发送一个请求连接的报文给服务器端;服务器端接收到请求后,返回一个确认连接的报文给客户端;最后,客户端再次发送一个确认连接的报文给服务器端,建立连接成功。

2. 数据传输:连接建立成功后,客户端和服务器端可以互相发送数据。

TCP通过将数据划分成一个一个的数据段进行传输,每个数据段都会附带一些控制信息,例如序号、确认号、校验和等,以确保数据的可靠性。

3. 断开连接:当数据传输完毕后,需要断开连接。

断开连接的步骤称为“四次挥手”。

首先,客户端发送一个断开连接的请求给服务器端;服务器端返回一个确认报文给客户端,表示已经收到了断开连接的请求;然后服务器端发送一个断开连接的请求给客户端;最后,客户端返回一个确认报文给服务器端,完成断开连接。

以上就是TCP通信的基本原理,下面将介绍如何使用Java语言实现一个简单的聊天室。

二、Java程序设计中的聊天室实现案例在Java程序设计中,可以使用Socket类和ServerSocket类来实现TCP通信。

下面的代码演示了一个简单的聊天室的实现:```java// 服务端import java.io.IOException;import .ServerSocket;import .Socket;import java.util.ArrayList;import java.util.List;public class Server {private static final int PORT = 8888;private List<ClientHandler> clientHandlers = new ArrayList<>();public static void main(String[] args) {new Server().start();}public void start() {try {ServerSocket serverSocket = new ServerSocket(PORT);System.out.println("服务器已启动,等待客户端连接...");while (true) {Socket clientSocket = serverSocket.accept();ClientHandler clientHandler = new ClientHandler(clientSocket, this);clientHandlers.add(clientHandler);new Thread(clientHandler).start();}} catch (IOException e) {e.printStackTrace();}}public void broadcast(String message) {for (ClientHandler clientHandler : clientHandlers) {clientHandler.sendMessage(message);}}public void removeClientHandler(ClientHandler clientHandler) { clientHandlers.remove(clientHandler);}}// 客户端import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .Socket;public class ClientHandler implements Runnable {private Socket socket;private Server server;private BufferedReader reader;private PrintWriter writer;public ClientHandler(Socket socket, Server server) {this.socket = socket;this.server = server;try {reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new PrintWriter(socket.getOutputStream(), true);} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {try {String message;while ((message = reader.readLine()) != null) {server.broadcast(message);}} catch (IOException e) {e.printStackTrace();} finally {try {reader.close();writer.close();socket.close();server.removeClientHandler(this); // 断开连接后从客户端处理列表中移除} catch (IOException e) {e.printStackTrace();}}}public void sendMessage(String message) {writer.println(message);}}// 测试类public class ChatRoomTest {public static void main(String[] args) {// 启动服务器new Server().start();// 启动客户端new Thread(() -> {try {Socket socket = new Socket("localhost", 8888);BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter writer = newPrintWriter(socket.getOutputStream(), true);writer.println("Hello, server!");String message;while ((message = reader.readLine()) != null) {System.out.println("收到服务器的消息:" + message);}} catch (IOException e) {e.printStackTrace();}}).start();}}```以上代码实现了一个简单的聊天室,服务器端使用ServerSocket监听客户端的连接请求,并创建一个新的线程来处理每个客户端的连接;客户端通过Socket连接到服务器,并发送消息给服务器,服务器收到消息后广播给所有的客户端。

java实现两台电脑间TCP协议文件传输

java实现两台电脑间TCP协议文件传输

java实现两台电脑间TCP协议⽂件传输记录下之前所做的客户端向服务端发送⽂件的⼩项⽬,总结下学习到的⼀些⽅法与思路。

注:本⽂参考⾃《⿊马程序员》视频。

⾸先明确需求,在同⼀局域⽹下的机器⼈A想给喜欢了很久的机器⼈B发送情书,但是机器⼈B事先并不知道⼩A的⼼思,那么作为⽉⽼(红娘)该如何帮助他们呢?然后建⽴模型并拆分需求。

这⾥两台主机使⽤⽹线直连,在物理层上确保建⽴了连接,接下来便是利⽤相应的协议将信息从电脑A传给电脑B。

在这⼀步上,可以将此过程抽象为⽹络+I/O(Input、Output)的过程。

如果能在⼀台电脑上实现⽂件之间的传输,再加上相互的⽹络协议,羞涩的A不就可以将情书发送给B了吗?因此要先解决在⼀台电脑上传输信息的问题。

为了在⽹络上传输,使⽤必要的协议是必要的,TCP/IP协议簇就是为了解决计算机间通信⽽⽣,⽽这⾥主要⽤到UDP和TCP两种协议。

当⼩A可以向⼩B发送情书后,⼜出现了众多的追求者,那么⼩B如何去处理这么多的并发任务呢?这时便要⽤到多线程的技术。

因此接下来将分别介绍此过程中所⽤到了I/O流(最基础)、⽹络编程(最重要)、多线程知识(较重要)和其中⼀些⼩技巧。

⼀、I/O流I/O流⽤来处理设备之间的数据传输,Java对数据的传输通过流的⽅式。

流按操作数据分为两种:字节流与字符流。

如果数据是⽂本类型,那么需要使⽤字符流;如果是其他类型,那么使⽤字节流。

简单来说,字符流=字节流+编码表。

流按流向分为:输⼊流(将硬盘中的数据读⼊内存),输出流(将内存中的数据写⼊硬盘)。

简单来说,想要将某⽂件传到⽬的地,需要将此⽂件关联输⼊流,然后将输⼊流中的信息写⼊到输出流中。

将⽬的关联输出流,就可以将信息传输到⽬的地了。

Java提供了⼤量的流对象可供使⽤,其中有两⼤基类,字节流的两个顶层⽗InputStream与OutputStream;字符流的两个顶层⽗类Reader 与Writer。

这些体系的⼦类都以⽗类名作为后缀,⽽⼦类名的前缀就是该对象的功能。

Java简单实现UDP和TCP的示例

Java简单实现UDP和TCP的示例

Java简单实现UDP和TCP的⽰例TCP实现TCP协议需要在双⽅之间建⽴连接,通过输⼊输出流来进⾏数据的交换,建⽴需要通过三次握⼿,断开需要四次挥⼿,保证了数据的完整性,但传输效率也会相应的降低。

简单的TCP实现//服务端public class TcpServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8886); // 建⽴服务端,ip为本机ip,端⼝为8886Socket accept = serverSocket.accept(); // 监听客户端的连接,⼀旦有客户端连接,则会返回客户端对应的acceptInputStream in = accept.getInputStream(); //获取到客户端的输出流byte b[] = new byte[1024];int len = in.read(b);System.out.println("接受到客户端数据,返回数据"+new String(b,0,len));OutputStream out = accept.getOutputStream(); // 给客户端发送消息out.write("服务端已经接受".getBytes());serverSocket.close();}}// 客户端public class TcpClient {public static void main(String[] args) throws IOException {Socket socket = new Socket("127.0.0.1", 8886); // 通过Socket来建⽴和服务端的连接OutputStream out = socket.getOutputStream(); // 获取输出流(客户端输出流即向服务端输出信息)out.write("hello tcp Server".getBytes()); // 输出信息InputStream in = socket.getInputStream(); // 接受服务端的消息byte b[] = new byte[1024];int len = in.read(b);System.out.println("接受到服务器消息: "+new String(b,0,len)); // 输出out.write("返回的的数据已经收到 ".getBytes()); // 向服务器返回消息socket.close();}}改进服务端,启⽤多线程来接受客户端的数据// serverpublic static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8886); // 建⽴服务端,ip为本机ip,端⼝为8886int i=4;while(i>2){Socket accept = serverSocket.accept(); // 监听客户端的连接,⼀旦有客户端连接,则会返回客户端对应的acceptServerThread st = new ServerThread(accept); // 启动线程Thread th = new Thread(st);th.start();}serverSocket.close();}// threadpublic class ServerThread implements Runnable {private Socket accept;public ServerThread(Socket s) {this.accept = s;}public void run(){InputStream in;try {in = accept.getInputStream();byte b[] = new byte[1024];int len = in.read(b);System.out.println("接受到客户端数据,返回数据" + new String(b, 0, len));OutputStream out = accept.getOutputStream(); // 给客户端发送消息out.write("服务端已经接受".getBytes());} catch (IOException e) {e.printStackTrace();}}}传递图⽚// 服务端public class Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(5555);Socket ss = serverSocket.accept();BufferedInputStream br = new BufferedInputStream(ss.getInputStream());BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("copy.jpg")); // 写出⽂件流 byte b[] = new byte[1024];int len = 0;while ((len = br.read(b)) != -1) { // 写出⽂件bw.write(b, 0, len);bw.flush(); // 别忘了刷新,要不然最后⼀块缓冲区字符串会缺失}BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(ss.getOutputStream())); // 输出bw2.write("图⽚传输成功");bw2.flush();bw.close();ss.close();}}// 客户端public class Client {public static void main(String[] args) throws UnknownHostException, IOException {Socket socket = new Socket("127.0.0.1", 5555);BufferedInputStream in = new BufferedInputStream(new FileInputStream("c.jpg"));BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());byte b[] = new byte[1024];int len = 0;while ((len = in.read(b)) != -1) {out.write(b, 0, len);out.flush(); // 刷新缓冲区要不然最后⼀块缓冲区字符串会缺失}socket.shutdownOutput(); // 关闭流以后Server段才会接收道结束字符结束接受BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));String line;while ((line = br.readLine()) != null) {System.out.println(line);}in.close();socket.close();}}UDP实现UDP是将数据打成数据包向对⽅发送,只关系是否发送成功,⽽不关⼼是否接收成功,传输速度快,但是可靠性低。

java tcp中文解析

java tcp中文解析

java tcp中文解析
Java中的TCP(传输控制协议)是一种面向连接的协议,它提供了可靠的、基于字节流的数据传输。

在Java中,我们可以使用Socket和ServerSocket类来实现TCP通信。

下面我将从多个角度全面解析Java中的TCP通信。

首先,我们需要创建一个ServerSocket对象来监听客户端的连接请求。

一旦有客户端连接,我们就可以通过accept()方法接受连接并创建一个Socket对象来与客户端进行通信。

然后,我们可以使用Socket的InputStream和OutputStream来进行数据的读取和写入。

在TCP通信中,数据的传输是通过字节流进行的,因此我们需要使用InputStream和OutputStream来进行数据的读取和写入。

对于中文数据的处理,我们可以使用InputStreamReader和OutputStreamWriter类来进行字符编码的转换,以确保正确地处理中文字符。

另外,为了确保数据的完整性和可靠性,我们可以使用缓冲流来提高数据传输的效率,并且可以使用ObjectInputStream和
ObjectOutputStream来传输Java对象。

此外,在TCP通信中,我们还需要考虑异常处理、多线程处理、超时设置等问题,以确保通信的稳定和可靠性。

总之,Java中的TCP通信涉及到Socket、ServerSocket、InputStream、OutputStream、字符编码转换、缓冲流、对象序列化
等多个方面,需要综合考虑各种因素来实现稳定、可靠的通信。


望以上解析能够全面回答你关于Java TCP的问题。

服务器端与客户端通过tcp协议进行通讯java程序实验结果

服务器端与客户端通过tcp协议进行通讯java程序实验结果

服务器端与客户端通过tcp协议进行通讯java程序实验结果篇一:TCP通信实验报告Java学号:姓名:————————基于TCP聊天室(java)基于TCP的应用程序实例【实验目的】使用套接字socket建立一个简单的基于TCP的客户/服务器形式的网络程序。

? 了解面向连接的通信原理分析客户机/服务器工作方式客户机/服务器模式在操作过程中采取的是主动请示方式 (1)、首先服务器要先启动,并根据请示提供相应服务,过程如下:打开通信通道并告知本地主机,它愿意在某个公认地址上接受客户请求。

? 等待客户请求到达该端口。

接收到重复服务请求,处理该请求并发送应答信号。

返回第二步,等待另一客户请求。

关闭服务器(2)、客户机启动后,向服务器发出请求,过程如下打开通道信号,并连接到服务器所在主机的特定端口。

向服务器发送服务请求,等待并接收应答;继续提出请求。

请求结束后关闭通道并终止。

【实验说明、运行截图】聊天程序由两大部分组成:服务器端聊天程序和客户端聊天程序。

服务器端聊天程序负责接创建若干连接,接受客户端的请求,收来自客户端的聊天信息,并且把这些信息转发到聊天窗口中。

客户端聊天程序则负责建立和维护与服务器端的连接,向服务器发送本客户的聊天内容,同时从服务器接收对方的响应。

以下是等待连接到连接成功两个过程截图1、(等待连接)22、连接成功:3客户端连接成功后,即可向服务器端发送信息,服务器端即可实时显示,另外,服务器端可以连接多个客户端。

45篇二:计算机网络基于Java的T cp服务器和客户端聊天程序HUNAN UNIVERSITY计算机网络实验报告题目实验三学生姓名学生学号专业班级物联一班指导老师谢鲲完成日期2013.12.15一、实验目的:1. 搞清楚什么是端口;明白什么是套接字(socket);2. 弄清楚网络通信在传输层传输数据的方式(两种:流传输(tcp)和数据报传输(udp)),明白三种套接字编程方法(流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW));3. 熟悉C++ MFC编程中的套接字编程;4. 了解tcp各种连接状态和套接字编程中服务器端和客户端的编程步骤,以及各个步骤的含义;5. 尝试实现流式套接字的服务器和客户端程序;二、实验要求:1. 根据实验要求,交一份标准的实验报告;2. 了解端口、套接字和TCP的各种连接状态;3. 理解通信过程中服务器端和客户端的通信过程;4. 尝试编写基于流式套接字的服务器和客户端程序;三、实验内容1、TCP各种连接状态(TCP套接字状态意义)TCP套接字解释状态意义CLOSED 没有使用这个套接字LISTEN 套接字正在监听入境连接SYN_SENT 套接字正在试图主动建立连接SYN_RECEIVED 正在处于连接的初始同步状态ESTABLISHED 连接已建立CLOSE_WAIT 远程套接字已经关闭:正在等待关闭这个套接字FIN_WAIT_1 套接字已关闭,正在关闭连接CLOSING 套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认LAST_ACK 远程套接字已,正在等待本地套接字的关闭确认FIN_W AIT_2 套接字已关闭,正在等待远程套接字关闭TIME_WAIT 这个套接字已经关闭,正在等待远程套接字的关闭传送2、Socket通信过程中服务器端和客户端的通信过程Socket是网络驱动层提供给应用程序编程的接口和一种数据发送、接收机制。

[JAVA]Tcp客户端和服务器简单代码

[JAVA]Tcp客户端和服务器简单代码

[JAVA]Tcp客户端和服务器简单代码服务器:1import java.io.DataInputStream;2import java.io.DataOutputStream;3import java.io.IOException;4import .ServerSocket;5import .Socket;67public class TcpServer {8public static void main(String [] args) throws IOException9 {10 @SuppressWarnings("resource")11 ServerSocket server=new ServerSocket(8000);12 Socket s=null;13 DataOutputStream dataOut=null;14 DataInputStream dataIn=null;15while(true){16try{17 s=server.accept();18 dataOut=new DataOutputStream(s.getOutputStream());19 dataIn =new DataInputStream(s.getInputStream());20while(true){21 Byte c=dataIn.readByte();22if(c=='0'){23 System.out.println("执⾏继电器快关变换!");24 dataOut.writeByte('Y');25 }else if(c=='w'){26 System.out.println("将温度值传给服务器!");27 dataOut.writeByte(2);28 }else if(c=='s'){29 System.out.println("将深度值传给服务器!");30 dataOut.writeByte(4);31 }else{32 System.out.println("错误命令返回!");33 dataOut.writeByte('N');34 }35 }36 }catch(IOException e){}37 dataOut.close();38 dataIn.close();39 s.close();40 }41 }42 }客户端代码:1/*2TCP客户端:输⼊命令从服务器获得数据3输⼊:0即开关继电器,当服务器执⾏好任务时返回894 w获得温度数据,服务器返回温度数据5 s获得⽔深数据,服务器返回⽔深数据6其他输⼊均为⽆效输⼊,服务器返回787PS:服务器只接受1个char,返回也是⼀个char,上述数据均为16进制8*/9import java.io.DataInputStream;10import java.io.DataOutputStream;11import java.io.IOException;12import .InetAddress;13import .Socket;14import java.util.Scanner;1516public class TcpClient {17public static void main(String [] args) throws IOException18 {19 Socket s = null;20 DataInputStream DataIn = null;21 DataOutputStream DataOut = null;22try {23//s=new Socket(InetAddress.getByName("192.168.1.130"),8000);24 s=new Socket("localhost",8000);25 DataIn = new DataInputStream(s.getInputStream());26 DataOut=new DataOutputStream(s.getOutputStream());27 System.out.println("连接成功");28 @SuppressWarnings("resource")29 Scanner keyIn= new Scanner(System.in);30while(keyIn.hasNext()){31 String c=keyIn.nextLine();32 System.out.println("输⼊: "+c);33if(c.length()==0)continue;34 DataOut.writeByte(c.charAt(0));35 System.out.println("收到: "+DataIn.readByte());36 }37 DataIn.close();38 DataOut.close();39 s.close();40 } catch (IOException e) {41// TODO Auto-generated catch block42 e.printStackTrace();43 }44 DataIn.close();45 DataOut.close();46 s.close();47 }48 }。

javatcpipsocket编程例子

javatcpipsocket编程例子

javatcpipsocket编程例子前一段时间刚做了个java程序和网络上多台机器的c程序通讯的项目,遵循的是TCP/IP协议,用到了java的Socket 编程。

网络通讯是java的强项,用TCP/IP协议可以方便的和网络上的其他程序互通消息。

先来介绍下网络协议:TCP/IPTransmission Control Protocol 传输控制协议Internet Protocol 互联网协议UDPUser Datagram Protocol 用户数据协议连接协议:分为:面向连接协议: Connection Oriented Protocol非连接协议: Connectionless Protocol 1).面向连接协议是指两台电脑在传输数据前,先会建立一个专属的连接。

就如电信局的交换机会为打电话双方提供专属连接一样。

Internet上的面向连接协议就是TCP/IP特点:确认回应;分组序号;流量控制。

TCP/IP属于可靠性传输,适合不容许有传输错误的网络程序设计使用2).非连接协议:无专属连接,无分组,容错,距离短,可同时对多台电脑进行数据传输Internet上的非连接协议就是UDP TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。

相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。

Socket 是程序与网络间的一种接口,大部分网络应用程序都是点对点的,所谓点就是服务器端和客户端所执行的程序。

Socket是用来接收和传送分组的一个端点。

java的Socket编程要用到 包,最常用的是net包下的6个类:InetAddress(互联网协议(IP) 地址)类,Socket(套接字)类,ServerSocket(套接字服务器)类,DatagramSocket(发送和接收数据报包的套接字)类,DatagramPacket(数据报包)类,MulticastSocket(多播数据报套接字类用于发送和接收IP 多播包)类,其中InetAddress、Socket、ServerSocket类是属于TCP面向连接协议,DatagramSocket、DatagramPacket和MulticastSocket类则属于UDP非连接协议的传送类。

java网络编程,简单的客户端和服务器端

java网络编程,简单的客户端和服务器端

java⽹络编程,简单的客户端和服务器端1.服务器端import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import .ServerSocket;import .Socket;public class HelloWorldServer {public static void main(String[] args) {ServerSocket server = null;BufferedReader reader = null;Socket client = null;try {server = new ServerSocket(9000);//创建ServerSocket对象,并绑定端⼝client = server.accept();//调⽤accept⽅法,等待客户端的连接InputStream in = client.getInputStream();reader = new BufferedReader(new InputStreamReader(in));String str = reader.readLine();System.out.println(str);} catch (IOException e) {e.printStackTrace();}finally{try{if(client!=null){client.close();}}catch(IOException e){e.printStackTrace();}}}}2.客户端import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import .Socket;import .UnknownHostException;import java.util.Scanner;public class HelloWorldClient {public static void main(String[] args) {Socket client = null;PrintWriter writer = null;try {client = new Socket("", 9000);//是我的云服务器OutputStream out = client.getOutputStream();writer = new PrintWriter(out);Scanner sc=new Scanner(System.in);String aa=sc.nextLine();writer.print(aa);writer.flush();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{try{if(writer!=null){writer.close();}if(client!=null){client.close();}}catch(IOException e){e.printStackTrace();}}}}3.运⾏ 将服务器端放到服务器上并运⾏运⾏服务器端正在等待客户端接⼊,然后本地运⾏客户端控制台输⼊你好,然后服务器端接收并显⽰你好4.拓展TCP编程.Socket.ServerSocketTCP编程的核⼼思路开发服务器端ServerSocket ss = new ServerSocket(9000)ss.accept();Socket s = new Socket("150.236.56.101", 9000)。

Java web客户端和服务器端交互的原理

Java web客户端和服务器端交互的原理

Java web客户端和服务器端交互的原理 Java web客户端和服务器端交互的原理其实HTTP客户端和服务器端的交互原理很简洁:即先是浏览器和服务器端建立Socket无状态连接,也就是短连接,然后通过IO流进行报文信息(这个报文是严格遵循HTTP报文接口的)的交互,最终会话结束后就关闭连接。

对于这些底层的协议和报文的打包解包交互的实现,其实java和浏览器早都已经封装好了,程序员只要专注于业务规律的实现就行。

1. 协议a. TCP/IP整体构架概述TCP/IP协议并不完全符合OSI的七层参考模型。

传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。

该模型的目的是使各种硬件在相同的层次上相互通信。

这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。

而TCP/IP通讯协议接受了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

这4层分别为:i. 应用层:应用程序间沟通的层,如超文本传送协议(HTTP)、简洁电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。

ii. 传输层:在此层中,它提供了节点间的数据传送服务,如传输把握协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。

iii. 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

iv. 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

b. HTTP协议介绍:i. HTTP是一种超文本传送协议(HyperText Transfer Protocol),是一套计算机在网络中通信的一种规则。

在TCP/IP体系结构中,HTTP 属于应用层协议,位于TCP/IP协议的顶层ii. HTTP是一种无状态的的协议,意思是指在Web 浏览器(客户端)和 Web 服务器之间不需要建立长期的连接。

java tcp协议通信实现方式

java tcp协议通信实现方式

java tcp协议通信实现方式TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

在Java中,可以使用Socket类和ServerSocket类来实现TCP协议的通信。

下面是一个简单的Java TCP通信示例:1. 服务器端代码:```javaimport ;import ;public class Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(1234); // 创建ServerSocket对象并绑定端口号("服务器已启动,等待客户端连接...");Socket clientSocket = (); // 等待客户端连接请求("客户端已连接:" + ());BufferedReader reader = new BufferedReader(new InputStreamReader(())); // 获取输入流String message = (); // 读取客户端发送的消息("收到客户端消息:" + message);PrintWriter writer = new PrintWriter(()); // 获取输出流 ("已收到消息:" + message); // 发送消息给客户端(); // 刷新缓冲区,确保消息发送出去();();();();}}```2. 客户端代码:```javaimport ;import ;public class Client {public static void main(String[] args) throws IOException {String host = "localhost"; // 服务器IP地址或主机名int port = 1234; // 服务器端口号Socket socket = new Socket(host, port); // 创建Socket对象并连接到服务器("已连接到服务器:" + ());PrintWriter writer = new PrintWriter(()); // 获取输出流BufferedReader reader = new BufferedReader(new InputStreamReader(())); // 获取输入流BufferedReader stdIn = new BufferedReader(new InputStreamReader()); // 从标准输入读取用户输入的消息String message = (); // 读取用户输入的消息(message); // 发送消息给服务器端(); // 刷新缓冲区,确保消息发送出去String response = (); // 读取服务器端返回的消息("服务器端返回消息:" + response);();();();();}}```在上面的示例中,服务器端通过ServerSocket类创建一个服务器端套接字,并绑定端口号等待客户端连接请求。

JAVA编写服务器和客户端

JAVA编写服务器和客户端

JAVA编写服务器和客户端在计算机网络中,服务器和客户端是常见的通信模型。

服务器是提供其中一种服务的主机,客户端则是向服务器请求服务的设备或应用程序。

通过编写服务器和客户端程序,可以实现不同设备之间的信息交互和数据传输。

Java是一种常用的编程语言,具备跨平台特性,并且有庞大的开发社区和丰富的类库。

通过使用Java编写服务器和客户端程序,可以快速构建稳定和高效的网络应用。

编写服务器程序可以从两个主要角度来考虑。

首先,我们需要决定所需的服务类型,如Web服务器、邮件服务器或文件服务器等。

其次,我们需要考虑如何处理客户端请求并提供相应的服务。

以简单的聊天室服务器和客户端为例,来介绍如何使用Java编写服务器和客户端程序。

首先,我们编写服务器程序。

服务器需要监听指定的端口,并处理客户端请求。

这里我们使用Java的Socket类来实现网络通信。

下面是一个简单的聊天室服务器程序示例:```javaimport java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;public class ChatServerprivate static final int PORT = 8080;private static List<Socket> clients = new ArrayList<>(; public static void main(String[] args)tryServerSocket serverSocket = new ServerSocket(PORT); while (true)Socket client = serverSocket.accept(;clients.add(client);new Thread(( ->tryInputStream in = client.getInputStream(;byte[] buffer = new byte[1024];while (true)int length = in.read(buffer);String message = new String(buffer, 0, length); broadcast(message);}} catch (IOException e)e.printStackTrace(;}}).start(;}} catch (IOException e)e.printStackTrace(;}}private static void broadcast(String message) throws IOExceptionfor (Socket client : clients)OutputStream out = client.getOutputStream(;out.write(message.getBytes();out.flush(;}}```在这个简单的聊天室服务器程序中,首先使用ServerSocket类创建服务器套接字,并指定监听的端口。

tcpserver 代码java

tcpserver 代码java

tcpserver 代码javaJava中的TCP服务器是一种基于传输控制协议(TCP)的服务器,用于处理网络通信。

在本文中,我们将重点讨论TCP服务器的Java 代码实现。

TCP(传输控制协议)是一种面向连接的协议,它提供了可靠的数据传输和错误检测机制。

TCP服务器是通过创建一个监听指定端口的套接字来实现的。

一旦服务器套接字创建成功,它将等待客户端的连接请求。

Java提供了Socket和ServerSocket类,用于实现TCP服务器。

下面是一个简单的TCP服务器的Java代码示例:```javaimport java.io.*;import .*;public class TCPServer {public static void main(String[] args) {try {// 创建服务器套接字,监听指定端口ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器已启动,等待客户端连接...");while (true) {// 接受客户端连接请求Socket clientSocket = serverSocket.accept();System.out.println("客户端连接成功!");// 获取输入输出流BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);// 读取客户端发送的数据String inputLine = in.readLine();// 处理客户端请求String response = "服务器已收到您的请求:" + inputLine;// 发送响应给客户端out.println(response);// 关闭连接clientSocket.close();System.out.println("客户端连接已断开!");}} catch (IOException e) {e.printStackTrace();}}}```以上代码实现了一个简单的TCP服务器。

javaTCP客户端和服务器的连接的简单代码(菜鸟日记)

javaTCP客户端和服务器的连接的简单代码(菜鸟日记)

javaTCP客户端和服务器的连接的简单代码(菜鸟⽇记)TCPServer.java⽂件中:import .*;import java.io.*;public class TCPServer{public static void main(String args[]){InputStream in=null; OutputStream out=null;//定义输⼊流、输出流try{ServerSocket ss=new ServerSocket(5888); //初始化服务端Socket socket=ss.accept(); //服务端和客户端相连in=socket.getInputStream();out=socket.getOutputStream();DataInputStream dis=new DataInputStream(in); //服务器端得到客户端输⼊流DataOutputStream dos=new DataOutputStream(out); //服务器端得到客户端输出流String s=null;if((s=dis.readUTF())!=null){System.out.println(s);System.out.println("from:"+socket.getInetAddress()); //获得IP地址System.out.println("Port:"+socket.getPort()); //获得端⼝号}System.out.println(s);dos.writeUTF("h1,hello");dos.close();dis.close();socket.close();}catch(IOException e){e.printStackTrace();}}}TCPClient.java⽂件中:import .*;import java.io.*;public class TCPClient{public static void main(String args[]){InputStream is=null; OutputStream os=null;try{Socket socket=new Socket("localhost",5888); //定义客户端的IP和端⼝号is=socket.getInputStream();os=socket.getOutputStream();DataInputStream dis=new DataInputStream(is); //输⼊流DataOutputStream dos=new DataOutputStream(os); //输出流dos.writeUTF("hey");String s=null;if((s=dis.readUTF())!=null);System.out.println(s);dos.close();dis.close();socket.close();}catch (UnknownHostException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();}}}运⾏时先运⾏服务器端再运⾏客户端。

Java基于socket实现的客户端和服务端通信功能完整实例

Java基于socket实现的客户端和服务端通信功能完整实例

Java基于socket实现的客户端和服务端通信功能完整实例本⽂实例讲述了Java基于socket实现的客户端和服务端通信功能。

分享给⼤家供⼤家参考,具体如下:以下代码参考马⼠兵的聊天项⽬,先运⾏ChatServer.java实现端⼝监听,然后再运⾏ChatClient.java客户端实例ChatClient.javapackage socketDemo;import java.awt.*;import java.awt.event.*;import java.io.*;import .*;public class ChatClient extends Frame {Socket s = null;DataOutputStream dos = null;DataInputStream dis = null;private boolean bConnected = false;TextField tfTxt = new TextField();TextArea taContent = new TextArea();Thread tRecv = new Thread(new RecvThread());public static void main(String[] args) {new ChatClient().launchFrame();}public void launchFrame() {setLocation(400, 300);this.setSize(300, 300);add(tfTxt, BorderLayout.SOUTH);add(taContent, BorderLayout.NORTH);pack();this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent arg0) {disconnect();System.exit(0);}});tfTxt.addActionListener(new TFListener());setVisible(true);connect();tRecv.start();}public void connect() {try {s = new Socket("localhost", 8888);dos = new DataOutputStream(s.getOutputStream());dis = new DataInputStream(s.getInputStream());System.out.println("connected!");bConnected = true;} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public void disconnect() {try {dos.close();dis.close();s.close();} catch (IOException e) {e.printStackTrace();}/** try { bConnected = false; tRecv.join(); } catch(InterruptedException* e) { e.printStackTrace(); } finally { try { dos.close(); dis.close();* s.close(); } catch (IOException e) { e.printStackTrace(); } }*/}private class TFListener implements ActionListener {public void actionPerformed(ActionEvent e) {String str = tfTxt.getText().trim();// taContent.setText(str);tfTxt.setText("");try {// System.out.println(s);dos.writeUTF(str);dos.flush();// dos.close();} catch (IOException e1) {e1.printStackTrace();}}}private class RecvThread implements Runnable {public void run() {try {while (bConnected) {String str = dis.readUTF();// System.out.println(str);taContent.setText(taContent.getText() + str + '\n');}} catch (SocketException e) {System.out.println("退出了,bye!");} catch (EOFException e) {System.out.println("推出了,bye - bye!");} catch (IOException e) {e.printStackTrace();}}}}socket服务端代码ChatServer.javapackage socketDemo;import java.io.*;import .*;import java.util.*;public class ChatServer {boolean started = false;ServerSocket ss = null;List<Client> clients = new ArrayList<Client>();public static void main(String[] args) {new ChatServer().start();}public void start() {try {ss = new ServerSocket(8888);started = true;} catch (BindException e) {System.out.println("端⼝使⽤中....");System.out.println("请关掉相关程序并重新运⾏服务器!"); System.exit(0);} catch (IOException e) {e.printStackTrace();}try {while (started) {Socket s = ss.accept();Client c = new Client(s);System.out.println("a client connected!");new Thread(c).start();clients.add(c);// dis.close();}} catch (IOException e) {e.printStackTrace();} finally {try {ss.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class Client implements Runnable {private Socket s;private DataInputStream dis = null;private DataOutputStream dos = null;private boolean bConnected = false;public Client(Socket s) {this.s = s;try {dis = new DataInputStream(s.getInputStream());dos = new DataOutputStream(s.getOutputStream());bConnected = true;} catch (IOException e) {e.printStackTrace();}}public void send(String str) {try {dos.writeUTF(str);} catch (IOException e) {clients.remove(this);System.out.println("对⽅退出了!我从List⾥⾯去掉了!");// e.printStackTrace();}}public void run() {try {while (bConnected) {String str = dis.readUTF();System.out.println(str);for (int i = 0; i < clients.size(); i++) {Client c = clients.get(i);c.send(str);// System.out.println(" a string send !");}/** for(Iterator<Client> it = clients.iterator();* it.hasNext(); ) { Client c = it.next(); c.send(str); }*//** Iterator<Client> it = clients.iterator();* while(it.hasNext()) { Client c = it.next(); c.send(str);* }*/}} catch (EOFException e) {System.out.println("Client closed!");} catch (IOException e) {e.printStackTrace();} finally {try {if (dis != null)dis.close();if (dos != null)dos.close();if (s != null) {s.close();// s = null;}} catch (IOException e1) {e1.printStackTrace();}}}}}本机测试运⾏结果:关闭客户端窗⼝后,提⽰信息如下:更多关于java相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》和《》希望本⽂所述对⼤家java程序设计有所帮助。

一个Java的Socket服务器和客户端通信的例子

一个Java的Socket服务器和客户端通信的例子

⼀个Java的Socket服务器和客户端通信的例⼦ ⼀个 HelloWord 级别的 Java Socket 通信的例⼦。

通讯过程: 先启动 Server 端,进⼊⼀个死循环以便⼀直监听某端⼝是否有连接请求。

然后运⾏ Client 端,客户端发出连接请求,服务端监听到这次请求后向客户端发回接受消息,连接建⽴,启动⼀个线程去处理这次请求,然后继续死循环监听其他请求。

客户端输⼊字符串后按回车键,向服务器发送数据。

服务器读取数据后回复客户端数据。

这次请求处理完毕,启动的线程消亡。

如果客户端接收到 "OK" 之外的返回数据,会再次发送连接请求并发送数据,服务器会为这次连接再次启动⼀个线程来进⾏响应。

直到当客户端接收到的返回数据为 "OK"时,客户端退出。

服务端源代码:public class Server {public static final int PORT = 12345;//监听的端⼝号public static void main(String[] args) {System.out.println("服务器启动...\n");Server server = new Server();server.init();}public void init() {try {ServerSocket serverSocket = new ServerSocket(PORT);while (true) {// ⼀旦有堵塞, 则表⽰服务器与客户端获得了连接Socket client = serverSocket.accept();// 处理这次连接new HandlerThread(client);}} catch (Exception e) {System.out.println("服务器异常: " + e.getMessage());}}private class HandlerThread implements Runnable {private Socket socket;public HandlerThread(Socket client) {socket = client;new Thread(this).start();}public void run() {try {// 读取客户端数据DataInputStream input = new DataInputStream(socket.getInputStream());String clientInputStr = input.readUTF();//这⾥要注意和客户端输出流的写⽅法对应,否则会抛 EOFException// 处理客户端数据System.out.println("客户端发过来的内容:" + clientInputStr);// 向客户端回复信息DataOutputStream out = new DataOutputStream(socket.getOutputStream());System.out.print("请输⼊:\t");// 发送键盘输⼊的⼀⾏String s = new BufferedReader(new InputStreamReader(System.in)).readLine();out.writeUTF(s);out.close();input.close();} catch (Exception e) {System.out.println("服务器 run 异常: " + e.getMessage());} finally {if (socket != null) {try {socket.close();} catch (Exception e) {socket = null;System.out.println("服务端 finally 异常:" + e.getMessage());}}}}}}客户端源代码:public class Client {public static final String IP_ADDR = "localhost";//服务器地址public static final int PORT = 12345;//服务器端⼝号public static void main(String[] args) {System.out.println("客户端启动...");System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终⽌\n");while (true) {Socket socket = null;try {//创建⼀个流套接字并将其连接到指定主机上的指定端⼝号socket = new Socket(IP_ADDR, PORT);//读取服务器端数据DataInputStream input = new DataInputStream(socket.getInputStream());//向服务器端发送数据DataOutputStream out = new DataOutputStream(socket.getOutputStream());System.out.print("请输⼊: \t");String str = new BufferedReader(new InputStreamReader(System.in)).readLine();out.writeUTF(str);String ret = input.readUTF();System.out.println("服务器端返回过来的是: " + ret);// 如接收到 "OK" 则断开连接if ("OK".equals(ret)) {System.out.println("客户端将关闭连接");Thread.sleep(500);break;}out.close();input.close();} catch (Exception e) {System.out.println("客户端异常:" + e.getMessage());} finally {if (socket != null) {try {socket.close();} catch (IOException e) {socket = null;System.out.println("客户端 finally 异常:" + e.getMessage());}}}}}} 注意: Socket 输出流写数据⽅法是 writeUTF 时,输⼊流读取相关数据要⽤ readUTF。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java实现一个简答而实际的TCP的服务端和客户端连接
服务端:
package com.server;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import .ServerSocket;
import .Socket;
import .SocketTimeoutException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TcpIpServer {
public static void main(String[] args) {
// info Auto-generated method stub
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(7777);
System.out.println(getTime()+"服务端准备好啦.");
} catch (IOException e) {
// info Auto-generated catch block
e.printStackTrace();
}
while(true){
try {
System.out.println(getTime()+"等待连接请求.");
// serverSocket.setSoTimeout(5*1000);
Socket socket = serverSocket.accept();
System.out.println(getTime()+socket.getInetAddress()+"连接请求从这开始.");
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("[Notice]Test Message1 from Server.");
System.out.println(getTime()+"数据传送啦.");
dos.close();
socket.close();
}
//catch(SocketTimeoutException e){
// System.out.println("end!");
// System.exit(0);
// }
catch (IOException e) {
// info Auto-generated catch block
e.printStackTrace();
}
}
}
static String getTime() {
// info Auto-generated method stub
SimpleDateFormat f = new SimpleDateFormat("[hh:mm:s]");
return f.format(new Date());
}
}
客户端:
package com.client;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import .Socket;
import .UnknownHostException;
public class TcpIpClient {
public static void main(String[] args) {
// info Auto-generated method stub
String serverIp = "127.0.0.1";
System.out.println("服务端连接中.服务端IP : " + serverIp);
try {
Socket socket = new Socket(serverIp, 7777);
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
System.out.println("从服务端获得消息: " + dis.readUTF());
System.out.println("连接终止.");
dis.close();
socket.close();
System.out.println("关闭连接.");
} catch (UnknownHostException e) {
// info Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// info Auto-generated catch block
e.printStackTrace();
}
}
}。

相关文档
最新文档