client
public void createConnection() throws UnknownHostException, RefusedException, SocketTimeoutException
{
try {
socket = new Socket();
SocketAddress address =new InetSocketAddress(this.hostUri, hostPort);
socket.connect(address, 5000);
logger.info("Socket server "+hostUri+" is connected");
}catch (UnknownHostException e) {
e.printStackTrace();
throw new UnknownHostException();
}catch(SocketTimeoutException e)
{
e.printStackTrace();
throw new SocketTimeoutException();
}
catch (IOException e) {
e.printStackTrace();
throw new RefusedException();
}
}
public boolean send()throws UnknownHostException,RefusedException, SocketTimeoutException ,SendException
{
boolean result = false;
createConnection();
writer = getWriter();
reader = getReader();
try {
writer.writeUTF(fileName);
writer.flush();
writer.writeLong(size);
writer.flush();
write(writer, reader);
writer.flush();
BufferedReader r = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String line="";
while (true) {
line = r.readLine();
if (line.equals("End"))
{
result =true;
break;
}
}
}
catch (IOException e) {
e.printStackTrace();
throw new SendException();
}finally
{
close();
}
return result;
}
protected void write(DataOutputStream dos,DataInputStream dis) throws IOException
{
byte [] buf =new byte [2048];
int read = 0;
while((read=dis.read(buf))!=-1)
{
dos.write(buf,0,read);
}
}
protected DataOutputStream getWriter()
{
try {
writer = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
return this.writer;
}
protected DataInputStream getReader()
{
return this.reader;
}
protected void close() {
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
server
public void run() {
String filePath="";
try {
dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
String fileName = dis.readUTF();
if(fileName.toLowerCase().indexOf(".jar")>0)
{
filePath=jarUploadPath+"//"+ fileName;
}else
{
filePath=xmlUploadPath+"//"+ fileName;
}
Long lth = dis.readLong();
File file = new File(filePath);
dos = new DataOutputStream(new FileOutputStream(file));
byte[] buf = new byte[1024];
int read = 0;
long tmp = 0;
log.info("正在接收文件:"+filePath+",大小:"+lth+"kb");
while ((read = dis.read(buf)) != -1) {
dos.write(buf, 0, read);
tmp+=read;
if(lth==tmp)
{
break;
}
}
PrintWriter pw = new PrintWriter(socket.getOutputStream());
log.info("文件接收完成:"+filePath);
pw.write("End");
pw.flush();
} catch (IOException e) {
log.error("文件接收错误:"+filePath);
e.printStackTrace();
} finally {
try {
dis.close();
dos.flush();
dos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
### Socket中的Send与Receive函数详解 在网络编程领域中,数据的发送与接收是核心操作之一。在本篇文章中,我们将重点探讨如何通过`send`和`recv`这两个基础函数来进行数据传输,虽然也有如Winsock2提供的`WSASend`...
本压缩包"**TDC_SOCKET_Send&Receive.zip**"包含的资源是关于TDC(可能是Time-Domain Convolutions或某种特定设备的简称)与个人计算机(PC)之间通过以太网进行的SOCKET通信的测试程序。该程序具有一个显著的特点,...
4. 数据交换:服务端和客户端都使用Send()和Receive()函数进行数据传输。Send()用于发送字符串或其他二进制数据,Receive()用于接收数据。 5. 错误处理:无论在服务端还是客户端,都需要适当的错误处理机制,例如...
简单的C#Socket工具,Socket.Connect 方法:建立到远程设备的连接 public void Connect(EndPoint remoteEP)(有重载方法) Socket.Send 方法:从数据中的指示位置开始将数据发送到连接的 Socket。 public int Send...
3. 发送数据:`socket.Send(Encoding.ASCII.GetBytes("要发送的数据"));` 4. 接收数据:`byte[] buffer = new byte[1024]; int received = socket.Receive(buffer); string data = Encoding.ASCII.GetString(buffer,...
在C#中,我们可以使用Socket的`Send()`和`Receive()`方法来发送和接收字节数据。在本案例中,XML文件会被序列化为字节流,然后通过Socket发送。接收端则反序列化接收到的字节流回XML文档。 4. **客户端**:客户端是...
3. 数据传输:通过send()和recv()函数发送和接收数据。 4. 断开连接:使用close()函数关闭Socket,结束连接。 总的来说,Socket提供了一种在网络中建立和维护连接的手段,而TCP协议则保证了数据的可靠传输。通过...
3. **接收数据(Receive)**: 使用`Socket.Receive()`或`Socket.BeginReceive()`/`Socket.EndReceive()`异步方法接收客户端发送的数据。 4. **发送数据(Send)**: 可以使用`Socket.Send()`或异步的`Socket....
在PowerBuilder(PB)环境中,Socket编程是一种常用的技术,用于实现应用程序间的网络通信。本篇将深入探讨如何在PowerBuilder中利用Socket进行网络传输,并详细解释相关API函数及其用法。 首先,Socket是网络编程...
6. **发送和接收数据**:连接建立后,通过`Socket.Send()`和`Socket.Receive()`方法进行数据传输。确保正确处理数据的编码和解码。 7. **关闭连接**:完成通信后,记得调用`Socket.Close()`或`Socket.Shutdown()`...
5. **接收和发送数据**:通过`Socket.Receive()`和`Socket.Send()`方法进行数据的读写。这两个方法可以阻塞直到有数据可读或数据被发送。 客户端的实现则相对简单: 1. **创建Socket实例**:同样使用`new Socket...
5. 使用这个新Socket实例进行数据的发送和接收,调用`Receive()`和`Send()`方法。 接下来,我们转向客户端。C#中的TCP客户端主要涉及以下操作: 1. 创建Socket实例,同样指定地址族和套接字类型。 2. 使用`Connect...
clientSocket.Send(sendBytes) ``` 接收数据时,我们需要创建一个缓冲区来存储接收到的数据,然后调用Receive方法: ```vbnet Dim receiveBuffer As New Byte(1024)() ' 创建一个足够大的缓冲区 Dim receivedCount ...
- 连接成功后,客户端就可以通过`Socket.Send()`方法发送数据,而服务器端则通过`Socket.Receive()`方法接收数据。 - 同样,服务器也可以使用`Socket.Send()`方法向客户端发送数据,客户端使用`Socket.Receive()`...
socket.Send(心跳数据); } catch (SocketException ex) { // 连接断开,尝试重连 if (ex.SocketErrorCode == SocketError.ConnectionReset) { Console.WriteLine("连接断开,尝试重连..."); Reconnect(socket,...
- 使用`Socket.Receive(Byte[] buffer, SocketFlags flags)`或`Socket.Receive(Byte[] buffer, int offset, int size, SocketFlags flags)`方法接收数据。注意,这些方法可能阻塞直到数据可用,或者达到指定大小。 ...
这通常涉及到 `Socket.Receive()` 和 `Socket.Send()` 方法。 7. **关闭 Socket**:通信完成后,务必调用 `Socket.Close()` 关闭 Socket,释放资源。 下面是客户端的步骤,与服务器类似,但主要区别在于客户端需要...
socket.Shutdown(SocketShutdown.Send); socket.Close(); ``` 为了提高代码的可重用性和可维护性,通常会将这些基本操作封装成类或方法。例如,可以创建一个TcpClient类,包含连接、发送、接收和断开连接的方法...
MQL4提供了内置的socket函数,如`Connect()`, `Accept()`, `Send()`, `Receive()`, `Close()`等,这些函数使得开发者可以方便地执行TCP/IP连接、数据传输和断开连接等操作。 标签"mql mql4_socket socket"进一步...
3. 数据收发:使用Socket的Receive和Send方法进行数据的接收和发送。 4. 错误处理:捕获SocketException异常,处理连接失败、数据传输错误等情况。 5. 关闭Socket:调用Close方法关闭Socket连接。 四、Socket服务端...