1、+i+个用户.); try Socket client=server.accept();第个用户连接完成! exec.execute(new PDAServerWithDB(client); catch(Exception whileExp) String msg = 多线程处理连接失败!; MyLogManager.ErrorLog(log, whileExp, msg); i+;catch(IOException ioe)连接失败! MyLogManager.ErrorLog(log, ioe, msg); exec.shutdown();具体对于Socket信息的接受和发送在PDASer
2、verWithDB类中处理信息处理分为:接收数据和发送数据服务端接收数据一律采用ReadLine()方法,这就要求客户端在发送请求时要有行结束符。服务器的接收发送数据的代码a)。构造输入输出流InputStream inPut = s.getInputStream();OutputStream outPut = s.getOutputStream();PrintWriter outWriter=new PrintWriter(outPut);BufferedReader inputReader =new BufferedReader(new InputStreamReader(inPut);b
3、。接收客户端请求的代码String request = inputReader.readLine();request = request.trim();request = request.replaceAll(n, c。向客户端发送文本数据的代码outWriter.println(strInfo);outWriter.flush();d)。向客户端发送文件的代码/ 发送文件长度File file = new File(filePath);byte outBytes = new byte1024;int count = 0;FileInputStream fileInput = new File
4、InputStream(file);ByteArrayOutputStream ow = new ByteArrayOutputStream();while (count = fileInput.read(outBytes) 0) MyLogManager.DebugLog(log, null, String.valueOf(count);ow.write(outBytes, 0, count);outPut.write(ow.toByteArray();/outWriter.print(ow);/这个在JAVA客户端时可以正常响应,而在C#客户端中无法响应。/outWriter.flush(
5、);二、客户端(使用java和c#两个版本)1).发送请求信息(字符串格式)对于JAVA来说:直接使用PrintWrite类的println()方法即可。而对于C#来说:需要使用socket.Send(System.Text.Encoding.ASCII.GetBytes(msg + r);需要在请求信息msg后面加上一个行结束标志符。2).接收数据(文本或者文件)2-1).java客户端接收数据java接收文本的代码示例:*代码示例*log.info(开始连接服务器InetAddress address = InetAddress.getByName(AppConfig.IP);/193.1
6、00.100.143);SocketChannel sc = SocketChannel.open(new InetSocketAddress(address,AppConfig.PORT);服务器连接成功/连接成功 初始化流InputStream inputStream = Channels.newInputStream(sc);InputStreamReader is = new InputStreamReader(inputStream,GBKin = new BufferedReader(is);接收服务器的数据 String responseLine=while (responseL
7、ine = in.readLine() != null) /用readLine接收数据是,会自动抛弃换行符,如果为了保持数据的格式,需要在这里加上一个换行标识符returnStr += responseLine+接收服务器的数据完毕*b.)java接收文件的示例代码:*代码示例*InetAddress address = InetAddress.getByName(193.100.100.159服务器连接成功,开始初始化流OutputStream outputStream = Channels.newOutputStream(sc);InputStreamReader inputStreamR
8、eader = new InputStreamReader(inputStream);byte b = new byte1024;ByteArrayOutputStream bArrStream = new ByteArrayOutputStream(fileLength);int readCount = 0;while (readCount = inputStream.read(b) != -1) log.info(readCount);bArrStream.write(b, 0, readCount);size:+bArrStream.toByteArray().length);2-2.)
9、 c#客户端接收数据的代码a.)接收文本数据Socket socket = null;MemoryStream memStream = null;string returnMsg = string.Empty;/与服务器建立连接socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPAddress add = IPAddress.Parse(appConfig.Ip);IPEndPoint endPt = new IPEndPoint(add, appConfig.Port);
10、socket.Connect(endPt);/接收数据byte buffer = new byte1024;int recCount = 0;memStream = new MemoryStream();/接收返回的字节流while (recCount = socket.Receive(buffer) 0)memStream.Write(buffer, 0, recCount);Encoding encoding = Encoding.GetEncoding(returnMsg = encoding.GetString(memStream.GetBuffer(), 0, memStream.G
11、etBuffer().Length);b.)接收文件数据*代码示例*MemoryStream memStream = new MemoryStream();/接下来按照文件格式,将memStream保存为文件即可=以上是最终使用的代码版本=在开发过程中出现的问题及其解决1.)文本乱码问题java服务器端代码文件是使用GBK编码。所以在客户端读取的时候使用GBK编码进行转换。2.)客户端和服务端的交互。在服务端使用PrintWriter类来封装数据发送流(发送数据),new BufferedReader(new InputStreamReader(InputStream)来封装输入流(读取数据)
12、服务端读数据的时候是使用ReadLine方法,所以就要求客户端发送请求时需要有一个行结束标志。对于java来说是用println()即可,而对于C#则需要在发送信息的后面手动增加一个行结束标识符。对于服务端的反馈信息有两种反馈方式,一个是println(),一个是write(byte)。前者是文本的发送,后者是文件的发送。在使用print(object)方法对文件发送时,java客户端可是正确的接收数据,而C#客户端却不能,所以才采用了write(byte)方法进行发送。接收数据时,还要对按行发送的文本数据进行去尾处理这个处理java和c#一样,只是方法名的大小写不同str = str.tri
13、m();str = str.replaceAll(方法二:public static void Send(String content) throws IOException Socket s = new Socket(ip,port); DataOutputStream out = new DataOutputStream(s.getOutputStream(); String temp = content; int length = temp.getBytes().length; byte b = temp.getBytes(); out.writeInt(length); out.write(b); out.flush(); 可以用上面的方法来发送到指定的端口,然后C#用只要监听端口就可以了,先接收一个int的报文长度,然后new出一个byte然后再接收一个byte,然后通过这个byte转换成String就可以了欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1