C#实现服务器和客户端通信问题

大家好,我是新手,现在需要做这样一个程序:客户端发送信息到服务器端,服务器根据客户端得信息,把相应的文件打包后发送到客户端,客户端解压后放回相应的文件夹。请问哪位高手给指... 大家好,我是新手,现在需要做这样一个程序:客户端发送信息到服务器端,服务器根据客户端得信息,把相应的文件打包后发送到客户端,客户端解压后放回相应的文件夹。 请问哪位高手给指点一下,不胜感激!!! 展开
 我来答
wang_ying_li
2011-07-05 · TA获得超过134个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:170万
展开全部
我想可以建两个WebService接口用于通信。再建一个FTP服务器用于下载。客户端通过WebService传递信息到服务器端。服务器端根据信息生成文件。上传到FTP服务器上(如果FTP服务器和通信服务器是一个保存到本地就可以了)。同时通知客户端下载。并把下载路径传给客户端。客户端下载。
更多追问追答
追问
谢谢您的回答! 我想问您,服务器可以根据客户端发来的信息,来搜集所需要的文件,然后打包发给客户端吗?
追答
可以。我上面说的客户端发送信息 就是通过WebServic实现的。文件传输是通过FTP方式实现的。你是只用Socket方式通信吗?打包和解压都可以通过执行Windows命令实现。
250cfeoom
2011-07-06 · TA获得超过2557个赞
知道大有可为答主
回答量:4657
采纳率:71%
帮助的人:834万
展开全部
import java.net.*;
import java.io.*;

public class Server {

public static void main(String[] args) throws IOException {
String s = "";//用stringbuffer试试
String s1 = "";
ServerSocket server = new ServerSocket(60000);
System.out.println("可以开始通信");

try {
Socket socket = server.accept();
System.out.println(socket);
InputStream is = socket.getInputStream();
OutputStream out = socket.getOutputStream();
BufferedReader bfr = new BufferedReader(new InputStreamReader(is));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

while (true) {
s = bfr.readLine();
System.out.println("客户端对我说:" + s);//读取客户端信息并输出
if("bye".equals(s)) {
pw.println("bye");
pw.flush();
break;
}

s1 = br.readLine();
pw.println(s1);
pw.flush();
System.out.println("我对客户端说:" + s1);
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
server.close();
}

class Reader extends Thread {
public void run() {
while (true) {

}
}
}
}

import java.net.*;
import java.io.*;

public class Talk {

static InputStream is = null;
static OutputStream out;
static BufferedReader bfr;
static PrintWriter pw;
static BufferedReader pin;

public static void main(String[] args) throws IOException {
Socket socket = new Socket(InetAddress.getByName("localhost"), 60000);
System.out.println(socket);

try {
is = socket.getInputStream();
out = socket.getOutputStream();
bfr = new BufferedReader(new InputStreamReader(is));
pw = new PrintWriter(new OutputStreamWriter(out));

pin = new BufferedReader(new InputStreamReader(System.in));

new Controlaa().start();

while (true) {

String s1 = bfr.readLine();
System.out.println("服务器对我说:" + s1);//读取服务器端发送的信息

if (s1.equals("bye")) {
break;
}
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}

static class Controlaa extends Thread {

@Override
public void run() {
while (true) {
String s = "";
try {
s = pin.readLine();
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println("我对服务器说:" + s);
pw.println(s);
pw.flush();
}
}
}
}

简单搞了下,读取控制台输入和读取socket都是阻塞操作
追问
我不是用java 实现,是用C#
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
正牌小卡
2011-07-05 · TA获得超过207个赞
知道小有建树答主
回答量:499
采纳率:66%
帮助的人:151万
展开全部
自动解压不会。另外你向壳户端传的是大文件的话,这就要考虑多线程技术了,用socket通信来做,你先查查多线程socket通信技术吧,还有消息队列
追问
谢谢您的回答!
如果不打包文件,是不是传输就会很麻烦了?
追答
肯定的,传大文件,不管是什么格式的,你都要先把他封包,这个封包的格式一般是,消息头,消息类型,是否加密,消息实体(就是你要传的文件),这个消息会被序列化,分割成2进制流来传送,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式