import java.net.*;
import java.io.*;
public class MyConnection2
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("www.ptpress.com.cn", 80);
// 向服务端程序发送数据
OutputStream ops = socket.getOutputStream();
OutputStreamWriter opsw = new OutputStreamWriter(ops);
BufferedWriter bw = new BufferedWriter(opsw);
bw.write("hello world\r\n\r\n");
bw.flush();
// 从服务端程序接收数据
InputStream ips = socket.getInputStream();
InputStreamReader ipsr = new InputStreamReader(ips);
BufferedReader br = new BufferedReader(ipsr);
String s = "";
while((s = br.readLine()) != null)
System.out.println(s);
socket.close();
}
}
在编写上面代码时要注意如下两点:
1. 为了提高数据传输的效率,Socket类并没有在每次调用write方法后都进行数据传输,而是将这些要传输的数据写到一个缓冲区里(默认是8192个字节),然后通过flush方法将这个缓冲区里的数据一起发送出去,因此,bw.flush();是必须的。
2. 在发送字符串时之所以在Hello World后加上 “\r\n\r\n”,这是因为HTTP协议头是以“\r\n\r\n”作为结束标志(HTTP协议的详细内容将在以后讲解),因此,通过在发送字符串后加入“\r\n\r\n”,可以使服务端程序认为HTTP头已经结束,可以处理了。如果不加“\r\n\r\n”,那么服务端程序将一直等待HTTP头的结束,也就是“\r\n\r\n”。如果是这样,服务端程序就不会向客户端发送响应信息,而br.readLine()将因无法读以响应信息面被阻塞,直到连接超时。
分享到:
相关推荐
本文将深入探讨如何利用Socket进行连续发送与连续接收数据,基于标题“利用socket连续发送与连续接收数据”以及描述中提到的实现过程。 首先,让我们理解什么是Socket。Socket是进程间通信的一种方式,它提供了一种...
本篇文章将深入探讨如何在C#中使用Socket类来实现TCP数据的发送和接收。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保了数据包的顺序传输和错误校验。在C#中,Socket类是.NET ...
本文将深入探讨如何使用C#进行Socket发送和接收数据。 首先,Socket是网络通信的基础组件,它提供了进程间的网络通信能力。在C#中,`System.Net.Sockets`命名空间包含了Socket相关的类,如`Socket`类,它是实现TCP/...
- 接收文件时,需要不断接收数据,直到接收到文件结束标识。可以使用`Receive()`方法或`BeginReceive()`/`EndReceive()`异步方法,接收的数据存入缓冲区,然后写入文件。 4. **错误处理和连接关闭** 在发送和接收...
3. **接收数据**:使用新连接的Socket的Receive方法接收客户端发送的数据块。 4. **写入文件**:将接收到的数据块写入本地文件,直到所有数据接收完毕。 5. **关闭连接**:传输完成后,关闭Socket连接。 在...
- 一旦连接建立,就可以通过Socket的Send和Receive方法发送和接收数据。 以下是简单的C#代码示例: **服务器端(Listen.cs)** ```csharp using System; using System.Net; using System.Net.Sockets; class ...
接收文件的过程与发送类似,但需要持续接收数据,直到文件完整。每次调用`Receive`方法接收一部分数据,然后写入文件。同时,可能需要跟踪已接收的字节数,以便知道何时完成接收。 5. **服务器下发文件**: 当...
3. **接收数据** - 获取输入流:同样,通过`Socket`的`getInputStream()`方法获取一个`InputStream`,然后利用`DataInputStream`或`BufferedReader`等类读取服务器返回的数据。 ```java InputStream inputStream ...
综上所述,Android应用利用Socket进行数据发送与接收主要涉及建立连接、发送数据、接收数据以及异常处理和资源关闭等步骤。在实际项目中,可能还需要考虑多线程、心跳机制、数据加密等问题,以提高网络通信的安全性...
连接成功后,我们可以通过Socket的Send和Receive方法发送和接收数据。注意,由于TCP是字节流协议,因此在实际应用中通常需要定义自己的数据协议格式,如JSON、XML或自定义二进制格式,以便正确解析接收到的数据。 ...
在接收端,同样需要创建并绑定Raw Socket,然后使用`recvfrom()`函数接收数据。由于Raw Socket不区分具体的协议,所以需要在接收端解析接收到的数据,判断其是否为UDP数据包,然后提取出头部信息和数据内容。 需要...
6. **接收数据**:调用Receive函数从Socket接收数据,通常需要循环接收,直到所有数据接收完毕。 7. **关闭连接**:完成通信后,调用Close函数关闭Socket。 **项目文件解析:** - `atmhost.aps` 和 `atmhost.clw` ...
通过上述代码示例和解析,我们可以了解到在 C# 中使用 Socket 进行网络通信的基本流程,包括创建 Socket 对象、绑定地址、监听连接、接受连接、发送和接收数据以及关闭 Socket 等步骤。这些步骤是构建网络应用程序的...
// 接收数据 String response = in.readLine(); System.out.println("Server replied: " + response); // 关闭连接 socket.close(); } } ``` 客户端通过`Socket`的`getInputStream()`和`getOutputStream()`...
本篇文章将详细探讨Android环境下如何进行Socket Client端和Socket Server端的数据发送与接收。 1. **Socket基础知识** - **Socket定义**:Socket是网络编程中的一个接口,它允许应用程序通过TCP/IP协议进行数据...
3. **接收数据**:使用`Socket.Receive`接收服务器发送的数据。 4. **保存图片**:将接收到的字节数组写入文件,以保存图片。 在客户端的`Main`方法中,接收图片的代码可能类似于: ```csharp byte[] receivedData...
参数含义与send类似,但recv在接收数据时的行为有所不同。recv会等待发送缓冲中的数据被协议完全发送,如果在此期间出现网络错误,recv会返回`SOCKET_ERROR`。当发送缓冲为空或数据发送完毕,recv会检查接收缓冲区。...
本文主要探讨如何通过Socket通信协议实现两者之间的位置坐标数据的发送和接收,这对于实现远程控制和自动化生产流程优化至关重要。 首先,我们要理解Socket通信的基本原理。Socket是一种网络通信接口,它允许不同...
在本案例中,XML文件会被序列化为字节流,然后通过Socket发送。接收端则反序列化接收到的字节流回XML文档。 4. **客户端**:客户端是主动发起连接请求的程序。在C#中,客户端首先创建一个Socket实例,然后使用`...
SocketTool SocketTool socket发送接收数据