package com.qingshan.net.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* <pre>
* 客户端:发送信息/接收服务器反馈信息
* </pre>
* <hr Color="green" ></hr>
* 2012 Qingshan Group 版权所有
* <hr Color="green" ></hr>
* @author thetopofqingshan
* @version 1.0.0
* @since JDK 1.5
* @date 2012-4-25
*/
public class Client {
public void run(String ip, int port){
OutputStream os = null;
InputStream is = null;
try {
Socket client = new Socket(ip, port);//接连目标ip:192.168.1.114,port:4321
os = client.getOutputStream();//
System.out.println("正在发送信息...");
os.write("发了一条给到没有, 收到了请回复一样的信息".getBytes());//发送信息
os.flush();//注意:如果不使用flush方法,服务端将收到客户端发送的信息
client.shutdownOutput();
is = client.getInputStream();//
byte[] buf = new byte[1024*8];//缓冲区
String msg="";
for(int len=is.read(buf);len>0;len=is.read(buf)){
msg+=new String(buf, 0, len);
}
client.shutdownInput();
System.out.println("正在接收回复信息...");
System.out.println("服务器返回的信息: "+msg);
System.out.println("接收回复信息完成");
} catch (IOException e) {
e.printStackTrace();
}finally{
//所有服务
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Client c=new Client();
String ip="localhost";
// ip="www.baidu.com";
int port=8888;
//int port=80;
c.run(ip, port);
}
}
package com.qingshan.net.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* <pre>
* 服务器:处理客户端发来的信息, 处理后作为反馈信息返回
* </pre>
* <hr Color="green" ></hr>
* 2012 Qingshan Group 版权所有
* <hr Color="green" ></hr>
* @author thetopofqingshan
* @version 1.0.0
* @since JDK 1.5
* @date 2012-4-25
*/
public class Server {
private ServerSocket server;
private Socket client;
public Server() {
try {
this.server = new ServerSocket(8888);//接收请求的端口
System.out.println("服务已启动....");
while (true) {
this.client = server.accept();//接收用户请求, 无在此等待, 有开启新的线程响应请求
if (client != null) {
//开启接收与处理信息的服务
Executor es = Executors.newCachedThreadPool();//线程池
es.execute(new Recieve(client));//开启新的线程
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* <pre>
* 线程:用于接收与处理信息
* </pre>
* <hr Color="green" ></hr>
* 2012 Qingshan Group 版权所有
* <hr Color="green" ></hr>
* @author thetopofqingshan
* @version 1.0.0
* @since JDK 1.5
* @date 2012-4-25
*/
public class Recieve implements Runnable {
public Recieve() {
}
public Recieve(Socket cleint) {
this.client = cleint;
}
Socket client;
public void run() {
try {
String response="接收到 socket客户端信息 ";
System.out.println("正在接收消息...");
InputStream is = client.getInputStream();
String msg = client.getInetAddress().getHostAddress() + ": ";
byte[] buf = new byte[1024*8];
for(int len=is.read(buf);len>0;len=is.read(buf)){
msg+=new String(buf, 0, len);
}
client.shutdownInput();
System.out.println("客户端消息:"+msg);
System.out.println("正在发送信息...");
OutputStream os = client.getOutputStream();
os.write(response.getBytes());//发送信息
os.flush();
client.shutdownOutput();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Server();
}
}
分享到:
相关推荐
1. **发送消息**: 在C#中,我们可以使用Socket的`Send`方法来发送字符串或字节数据。通常,我们需要先将字符串转换为字节数组,例如通过`Encoding.ASCII.GetBytes`方法。然后,调用`Send`方法并传入这个字节数组。...
客户端则直接用已连接的Socket接收数据。 5. 关闭Socket: 在完成通信后,别忘了关闭Socket,以释放系统资源。 ```csharp socket.Shutdown(SocketShutdown.Both); socket.Close(); ``` 6. 异步操作: 在...
客户端会发送消息,而服务器则接收并回应这些消息。通过查看和分析这些代码,你可以更好地理解上述概念如何在实际应用中工作。 总结,C#中的UDP异步通信结合了`UdpClient`类和异步编程模式,为高效、非阻塞的网络...
本教程将详细讲解如何利用Java Socket实现基于TCP/IP的服务端和客户端之间的报文发送与接收。 TCP(传输控制协议)是一种面向连接、可靠的传输协议,它确保了数据包的有序和无损传输。IP(互联网协议)则是互联网上...
Socket编程是网络通信的核心部分,它...理解Socket的基本操作,如连接、发送、接收和关闭,是迈向网络编程的关键步骤。在实际应用中,还需要考虑异常处理、多线程、数据编码和解码等问题,以确保程序的稳定性和可靠性。
### C# 使用 Socket 发送与接收数据 #### 知识点概述 在 C# 编程语言中,使用 Socket 进行网络通信是一种常见的技术手段。Socket 是一种用于在网络节点间进行双向通信的协议和机制,它使得不同计算机之间能够通过...
在这个例子中,服务器在12345端口监听,客户端连接并发送消息,服务器接收到消息后回应,然后关闭连接。这只是一个基础的交互,实际应用中可能需要处理多线程、异步操作、错误处理等复杂情况。 在VS2010中,可以...
本文将深入探讨如何使用Socket类来实现UDP组播的发送和接收,并且讨论如何指定特定的网络接口进行消息接收。 首先,让我们了解UDP组播的基本概念。组播不同于单播和广播,它允许一个发送者向多个接收者同时发送数据...
客户端创建Socket,连接到服务器,发送消息,然后关闭连接。服务器端则创建监听Socket,等待客户端连接,接收消息,发送回应,最后关闭连接。这样的一个简单交互展示了C# Socket通信的基本流程。 在实际应用中,你...
string message = "Hello, Server!"; byte[] data = Encoding.ASCII.GetBytes(message); socket.Send(data); ``` 这里的`Encoding.ASCII.GetBytes`方法用于将字符串转换为ASCII编码的字节数组。 发送文件则稍微...
**ClientHandler**:这个处理器同样继承自`ChannelInboundHandlerAdapter`,重写`channelActive()`方法来发送消息到服务器,`channelRead0()`方法接收服务器的回应。 ```java public class ClientHandler extends ...
string message = Encoding.ASCII.GetString(buffer, 0, received); Console.WriteLine("Received: {0}", message); ``` 5. 关闭连接: 在完成通信后,记得关闭Socket连接。 ```csharp clientSocket.Shutdown...
在这个实例中,客户端通过`ConnectAsync`连接到服务端,使用`SendAsync`发送消息,并通过事件处理接收到的消息。 为了实现通信,客户端首先调用`ConnectAsync`建立连接,然后可以随时使用`SendAsync`向服务端发送...
String message = "你要发送的字符串"; byte[] bytes = message.getBytes(StandardCharsets.UTF_8); outputStream.write(bytes); outputStream.flush(); outputStream.close(); ``` 4. **接收响应**:同样,...
string message = Encoding.UTF8.GetString(buffer, 0, received); Console.WriteLine("Received: {0}", message); ``` 在实际应用中,Socket通信会涉及更多细节,如多线程处理、心跳检测、断线重连等。为了保证...
本篇文章将深入探讨如何使用C#实现Socket服务端向指定客户端发送消息的功能。 首先,理解Socket的基本概念是至关重要的。Socket是操作系统提供的一种进程间通信(IPC)机制,它允许两个网络应用程序通过TCP/IP协议...
总的来说,C#的Winform Socket字符串发送程序是一个基础但实用的学习案例,它涵盖了网络通信的基本流程:创建Socket、建立连接、发送和接收数据,以及异常处理。通过理解和实践这个程序,开发者能够更好地理解Socket...
Socket在计算机网络中相当于一个出入口,它允许程序发送和接收数据。在TCP/IP协议栈中,Socket分为两种类型:基于TCP(Transmission Control Protocol)的流式Socket和基于UDP(User Datagram Protocol)的 datagram...
本示例将详细解析如何使用Java的非阻塞I/O(NIO)实现Socket通信,包括客户端发送消息和服务器端接收消息的过程。 首先,理解NIO(Non-blocking Input/Output)的概念至关重要。NIO与传统的IO模型不同,它提供了对...