`

socket接收消息并进行反馈

阅读更多
1、服务器端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

/**
 * 编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。
 * 服务器程序启动后,监听端口5678的请求;客户端程序启动后,向服务器端口5678发送请求。
 * 服务器不断接收客户机所写入的信息,并且服务器也会做出"Receive"为回应,告知客户机已接收到消息。
 * 要求:服务器程序采用多线程开发,
 * 允许多个客户端程序同时连接。客户机发送"End"字符串时,客户端程序退出。
 * @author Administrator
 */
public class Server {
	
	public static ArrayList<Socket> socketList = new ArrayList<Socket>();
	public static void main(String[] args){
		try {
			ServerSocket ss = new ServerSocket(5678);
			while(true){
				System.out.println("等待连接...");
				Socket s = ss.accept();
				// 每收到一个socket连接 ,则启动一条SeverThread线程
				System.out.println("连接成功,等待客户端输入信息!");
				socketList.add(s);
				new Thread(new SeverThread(s)).start();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		};
	}
}

class SeverThread implements Runnable{

	Socket s = null;
	BufferedReader br = null;
	PrintStream ps = null;
	
	public SeverThread(Socket s) {
		this.s = s;
		try {
			// 初始化该socket对应的输入流    得到客户端的信息
			br = new BufferedReader(new InputStreamReader(s.getInputStream()));
			// 获取该socket对应的输出流
		    ps = new PrintStream(s.getOutputStream());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		String content = null;
		try {
			
			while((content = br.readLine()) != null){
				
				System.out.println("content : " + content);	
				// 向客户端发出反馈消息
				ps.println("Receive");
				 //判断是否结束
			    if(content.equals("End"))
			    {
			    	System.out.println("对话结束!");
			    	s.shutdownOutput();
			    	break;
			    }
			}
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			
		}
		finally{
			try {
				br.close();
				ps.close();
				Server.socketList.remove(s);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	
}


2、客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Socket s = null;
		try {
			s = new Socket("127.0.0.1",5678);
			new Thread(new ClientThread(s)).start();
			// 获取该socket对应的输出流
			PrintStream ps = new PrintStream(s.getOutputStream());
			String line = null;
			// 不断读取键盘输入
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			while((line = br.readLine()) != null || !(line = br.readLine()).equals("End")){
				ps.println(line);
			}
			s.shutdownOutput();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

class ClientThread implements Runnable{

	Socket s = null;
	// 初始化该socket对应的输入流
	BufferedReader br = null;
	public ClientThread(Socket s) throws IOException {
		this.s = s;
		try {
			br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		String content = null;
		try {
			while((content = br.readLine())!= null){
				System.out.println("服务器端返回的数据:" + content);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				br.close();
				s.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
}

分享到:
评论

相关推荐

    C# socket通信项目,实现了实现了心跳、断线重连、服务端异步接收数据、消息回调反馈、解决了粘包相关问题,可以多客户端

    3、socket功能类库模块(其他项目也可以引用),socket类库模块功能齐全,只需调用其中方法即可,复用性较强,代码注释详细,实现了心跳,解决了粘包问题,异步发送接收数据,等等,bin目录下右运行日志方便查找程序...

    基于对话框的Socket通信

    例如,我们可能会收到WM_SOCKET消息,这表明Socket发生了事件。这时,我们需要处理这些消息,比如: ```cpp afx_msg LRESULT OnSocketMessage(WPARAM wParam, LPARAM lParam); { switch (FD_READ) { case FD_READ...

    java基于socket的文件发送与接收,有界面,有进度条

    总结来说,这个Java项目展示了如何利用Socket进行文件的发送和接收,通过GUI增强用户体验,以及如何有效地处理大文件传输和进度反馈。对想要深入理解Java网络编程和GUI开发的人来说,这是一个值得研究的实例。

    Socket模拟服务器_Socket模拟服务器_

    writer.println("服务器已收到你的消息:" + line); ``` **5. 关闭资源** 为了防止资源泄露,服务器在完成通信后需要关闭Socket和相关的流对象。 ```java writer.close(); outputStream.close(); clientSocket....

    mina 服务器socket客服端发消息

    本文将深入探讨如何使用Mina来实现一个服务器以及对应的Socket客户端,从而进行消息传递。 **Mina 框架介绍** Mina提供了一个高级抽象层,允许开发者用类似处理Java IO的方式处理NIO(非阻塞I/O)。它简化了网络...

    MFC SOCKET 接收机械臂实时数据客户端

    总的来说,"MFC SOCKET 接收机械臂实时数据客户端"项目是一个实用的示例,展示了如何利用MFC和SOCKET技术进行网络通信,并处理底层数据。对于初学者来说,它提供了学习网络编程和数据解析的一个良好起点。通过深入...

    Socket服务端客户端以tcp/ip协议发送接收报文

    `ServerThread`类负责读取客户端发送的数据,打印出来,并将接收到的消息原样返回给客户端。 接着,我们看客户端的实现。客户端通过`Socket`类与服务端建立连接,并发送数据。以下是一个简单的客户端代码示例: ``...

    SocketClient.cs_socket_

    总之,SocketClient.cs实例是一个基础的Socket客户端程序,展示了如何在C#中建立和管理TCP连接,以及如何进行数据的发送和接收。通过学习这个例子,开发者可以了解Socket编程的基本原理,并在此基础上构建更复杂的...

    Android 通过Socket 和服务器通讯

    消息是放在队列里的,当有消息后,进入队列,线程唤醒,发送消息,并反馈发送是否成功的回调 (2)开启一个线程接受服务器消息 SocketInputThread 为了防止一直收数据,浪费电池的电,采用NIO的方式读socket的...

    socket实现服务端客户端通信

    为了保持显示IP地址的实时性,客户端需要持续监听服务端的反馈,一旦有新消息,就更新显示。 实现这一功能时,通常我们会用到Java的Socket类和ServerSocket类,它们位于java.net包下。Socket类代表网络连接,提供了...

    CsharpSocketTCPIPC# 使用Socket发送和接收TCP数据

    C#的Socket通信可以用于建立上位机与下位机之间的桥梁,实现指令的发送和反馈的接收。例如,上位机可以发送控制指令给PLC,PLC执行后返回执行状态或结果。为了确保数据的正确性,通常会包含数据校验机制,如CRC校验...

    Socket聊天室源码

    客户端也可能使用多线程,比如在发送消息的同时接收服务器的反馈。 8. **异常处理**:在网络通信中,由于网络不稳定或其他原因,可能会出现连接中断、数据丢失等问题,因此在编写代码时需要充分考虑异常处理,确保...

    socket实现上传文件工具类

    - 接收数据:通过Socket的`InputStream`读取客户端发送的数据,并保存至本地文件。 - 关闭资源:`inputStream.close();` 和 `serverSocket.close();` 四、关键步骤详解 - 数据分块:由于文件可能较大,不能一次性...

    supersocket 服务端控制台与客户端winform案例

    服务端主要负责监听客户端的连接请求,接收客户端发送的数据,并对数据进行处理后反馈给客户端。服务端通常是一个控制台应用程序,因为它需要持续运行并保持对网络连接的监听。开发者可以创建自定义的协议解析器,以...

    android socket + websocket 集合demo

    在SocketDemo中,可能会包含一个客户端Socket类,用于与服务器进行数据交换,例如发送用户输入的信息,接收服务器反馈的数据。 WebSocket则是一种在客户端和服务器之间建立长连接的协议,相比传统的HTTP请求,...

    C# Socket即时通讯

    9. **多线程与并发处理**:在即时通讯系统中,多线程技术是必不可少的,它能保证多个操作(如接收消息、处理文件传输等)同时进行,提升系统的响应速度和用户体验。 10. **错误处理与异常捕获**:为了保证系统的...

    Android开发基于Socket聊天最终版

    2. **数据传输**:连接建立后,客户端和服务器可以通过Socket的输入输出流进行数据交换,实现消息的发送和接收。 3. **关闭连接**:通信完成后,记得关闭Socket以释放资源。 二、仿QQ聊天功能 本项目模仿了QQ聊天的...

    Winform(Socket例子)

    客户端连接到服务器,并发送一条消息,然后接收并打印服务器的响应。 压缩包中的"USBKEY"和"USBKEY2"可能是用于模拟USB密钥设备的类或模块,它们可能包含处理USB设备连接、数据读写以及与Socket服务器交互的逻辑。...

    WinForm Socket 同步通信 源代码

    4. **同步发送数据**:当用户输入消息并点击“发送”按钮时,使用Socket的`Send()`方法将数据发送到服务器。由于是同步通信,此过程会阻塞,直到数据发送完成。 5. **同步接收数据**:在发送数据后,使用Socket的`...

    IBM SOCKET 教程1

    这些文件可能包括页眉图像、反馈按钮、PDF图标等,它们对于理解SOCKET编程本身并无直接影响,但在实际的在线教程环境中,它们提供了用户友好的阅读体验。 总之,IBM的这个SOCKET教程1是一个全面介绍网络编程基础的...

Global site tag (gtag.js) - Google Analytics