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();
}
}
}
}
分享到:
相关推荐
3、socket功能类库模块(其他项目也可以引用),socket类库模块功能齐全,只需调用其中方法即可,复用性较强,代码注释详细,实现了心跳,解决了粘包问题,异步发送接收数据,等等,bin目录下右运行日志方便查找程序...
例如,我们可能会收到WM_SOCKET消息,这表明Socket发生了事件。这时,我们需要处理这些消息,比如: ```cpp afx_msg LRESULT OnSocketMessage(WPARAM wParam, LPARAM lParam); { switch (FD_READ) { case FD_READ...
总结来说,这个Java项目展示了如何利用Socket进行文件的发送和接收,通过GUI增强用户体验,以及如何有效地处理大文件传输和进度反馈。对想要深入理解Java网络编程和GUI开发的人来说,这是一个值得研究的实例。
writer.println("服务器已收到你的消息:" + line); ``` **5. 关闭资源** 为了防止资源泄露,服务器在完成通信后需要关闭Socket和相关的流对象。 ```java writer.close(); outputStream.close(); clientSocket....
本文将深入探讨如何使用Mina来实现一个服务器以及对应的Socket客户端,从而进行消息传递。 **Mina 框架介绍** Mina提供了一个高级抽象层,允许开发者用类似处理Java IO的方式处理NIO(非阻塞I/O)。它简化了网络...
总的来说,"MFC SOCKET 接收机械臂实时数据客户端"项目是一个实用的示例,展示了如何利用MFC和SOCKET技术进行网络通信,并处理底层数据。对于初学者来说,它提供了学习网络编程和数据解析的一个良好起点。通过深入...
`ServerThread`类负责读取客户端发送的数据,打印出来,并将接收到的消息原样返回给客户端。 接着,我们看客户端的实现。客户端通过`Socket`类与服务端建立连接,并发送数据。以下是一个简单的客户端代码示例: ``...
总之,SocketClient.cs实例是一个基础的Socket客户端程序,展示了如何在C#中建立和管理TCP连接,以及如何进行数据的发送和接收。通过学习这个例子,开发者可以了解Socket编程的基本原理,并在此基础上构建更复杂的...
消息是放在队列里的,当有消息后,进入队列,线程唤醒,发送消息,并反馈发送是否成功的回调 (2)开启一个线程接受服务器消息 SocketInputThread 为了防止一直收数据,浪费电池的电,采用NIO的方式读socket的...
为了保持显示IP地址的实时性,客户端需要持续监听服务端的反馈,一旦有新消息,就更新显示。 实现这一功能时,通常我们会用到Java的Socket类和ServerSocket类,它们位于java.net包下。Socket类代表网络连接,提供了...
C#的Socket通信可以用于建立上位机与下位机之间的桥梁,实现指令的发送和反馈的接收。例如,上位机可以发送控制指令给PLC,PLC执行后返回执行状态或结果。为了确保数据的正确性,通常会包含数据校验机制,如CRC校验...
客户端也可能使用多线程,比如在发送消息的同时接收服务器的反馈。 8. **异常处理**:在网络通信中,由于网络不稳定或其他原因,可能会出现连接中断、数据丢失等问题,因此在编写代码时需要充分考虑异常处理,确保...
- 接收数据:通过Socket的`InputStream`读取客户端发送的数据,并保存至本地文件。 - 关闭资源:`inputStream.close();` 和 `serverSocket.close();` 四、关键步骤详解 - 数据分块:由于文件可能较大,不能一次性...
服务端主要负责监听客户端的连接请求,接收客户端发送的数据,并对数据进行处理后反馈给客户端。服务端通常是一个控制台应用程序,因为它需要持续运行并保持对网络连接的监听。开发者可以创建自定义的协议解析器,以...
在SocketDemo中,可能会包含一个客户端Socket类,用于与服务器进行数据交换,例如发送用户输入的信息,接收服务器反馈的数据。 WebSocket则是一种在客户端和服务器之间建立长连接的协议,相比传统的HTTP请求,...
9. **多线程与并发处理**:在即时通讯系统中,多线程技术是必不可少的,它能保证多个操作(如接收消息、处理文件传输等)同时进行,提升系统的响应速度和用户体验。 10. **错误处理与异常捕获**:为了保证系统的...
2. **数据传输**:连接建立后,客户端和服务器可以通过Socket的输入输出流进行数据交换,实现消息的发送和接收。 3. **关闭连接**:通信完成后,记得关闭Socket以释放资源。 二、仿QQ聊天功能 本项目模仿了QQ聊天的...
客户端连接到服务器,并发送一条消息,然后接收并打印服务器的响应。 压缩包中的"USBKEY"和"USBKEY2"可能是用于模拟USB密钥设备的类或模块,它们可能包含处理USB设备连接、数据读写以及与Socket服务器交互的逻辑。...
4. **同步发送数据**:当用户输入消息并点击“发送”按钮时,使用Socket的`Send()`方法将数据发送到服务器。由于是同步通信,此过程会阻塞,直到数据发送完成。 5. **同步接收数据**:在发送数据后,使用Socket的`...
这些文件可能包括页眉图像、反馈按钮、PDF图标等,它们对于理解SOCKET编程本身并无直接影响,但在实际的在线教程环境中,它们提供了用户友好的阅读体验。 总之,IBM的这个SOCKET教程1是一个全面介绍网络编程基础的...