我在客户端有一个xml文件有很多行我现在要通过socket将其传到服务端,并在服务端接受之后存储为新的文件。试了很多方法都不成功,求高手指点。越具体越好?
解决方案 »
- Spring Hibernate C3P0 连接MySQL 出现出现错误
- hibernate只能存最后一条记录,求解答~~~
- spring注入问题,很奇怪
- 急用!!怎样用javascrip在网页中添加tag标签?
- org.apache.log4j 与 org.apache.commons.logging
- 数据移植程序框架
- JDOM与JDK版本的问题
- 请问怎样把WebLogic 8.1加进jbuilderX里啊?
- 什么是EJB的工程使用价值
- tomcat上面项目运行正常,weblogic下面出现•There is no Action mapped for namespace [/] and acti
- 怎么把一个java的bean传给js函数呢?急死了!
- 用Tomcat调试jsp程序出现如下:“cannot be resolved” ,请高手帮帮忙阿,急
---------------------------------------------------------
java 的socket编程相对来说比较简单,只要建立套节字,然后通过套节字产生输入输出流就行了。以下是一个
简单实例。
服务器代码:-----------------------------------------------------------------
package com.net;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread {
private static ServerSocket socket = null;
private static Socket ss = null; @Override
public void run() {
try {
socket = new ServerSocket(1234);
while(true)
{
System.out.println("-------------");
ss = socket.accept();
DataInputStream dis = new DataInputStream(ss.getInputStream());
DataOutputStream dos = new DataOutputStream(ss.getOutputStream());
System.out.println("服务器接收到客户端的连接请求:" + dis.readUTF());
dos.writeUTF("接受连接请求,连接成功!");
System.out.println("------------------2");
if(ss!=null)
ss.close();
}
} catch (IOException e) {
if(ss!=null)
try {
ss.close();
if(socket!=null)
socket.close();
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
e.printStackTrace();
}
}
public static void close()
{
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}注:这里关键在于socket = new ServerSocket(1234);产生一个套接字,用于指定到端口的服务,而ss = socket.accept();
是在端口上侦听。每次侦听时会等待客户端的连接,如果没有连接就不会执行下面的代码。当有连接时就会执行下面的
代码,可以对接收到的内容进行处理。事实上我们有时是多次侦听,也就是执行这次后重新侦听。客户端代码:-------------------------------------------------------------------------------------
Socket socket = null;
try {
socket = new Socket("localhost",1234);
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//获取输入流,用于接收服务器端发送来的数据
DataInputStream dis = new DataInputStream(socket.getInputStream());
//客户端向服务器端发送数据
dos.writeUTF("yanhuan!");
//打印出从服务器端接收到的数据
System.out.println(dis.readUTF());
//不需要继续使用此连接时,记得关闭哦
socket.close();
} catch (UnknownHostException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
这个应该没问题的,
但SOCKET ACCEPT客户后,如果"交手"还未完就有新客户接入,
SOCKET会"冲"的,何谓"冲"的,我想楼主自己试一下就会感受到一般的做发是
ss=socket.accept();
Thread t=new Thread(hanshu());
//这里最好做异步,但不知对楼主会不会复杂点
hanshu(){
在这里作一个处理,这样接入的客户就不会冲了,
}
//SOCKET的数据可以当文件流“STREAM”来传送,不知楼主
熟不数流