java和C#之间SOCKET通信的问题
一、服务器端(使用java编写)
/**
* 监听客户端的请求
*
*/
private static void socketService()
{
ExecutorService exec = wCachedThreadPool(); try
{
ServerSocket server=new ServerSocket(5678);
int i = 1;
while(true)socket通信在哪一层
{
MyLogManager.InfoLog(log, null,"等待连接第"+i+"个用户...");
try
{
Socket client=server.accept();
MyLogManager.InfoLog(log, null,"第"+i+"个用户连接完成!");
}
catch(Exception whileExp)
{
String msg = "多线程处理连接失败!";
MyLogManager.ErrorLog(log, whileExp, msg);
}
i++;
}
}
catch(IOException ioe)
{
String msg = "连接失败!";
MyLogManager.ErrorLog(log, ioe, msg);
exec.shutdown();
}
}
具体对于Socket信息的接受和发送在PDAServerWithDB类中处理信息处理分为:接收数据和发送数据
服务端接收数据一律采用ReadLine()方法,这就要求客户端在发送请求时要有行结束符。
服务器的接收发送数据的代码
a)。构造输入输出流
InputStream inPut = s.getInputStream();
OutputStream outPut = s.getOutputStream();
PrintWriter outWriter=new PrintWriter(outPut); BufferedReader inputReader =new BufferedReader(new InputStreamReader(inPut));
b。接收客户端请求的代码
String request = adLine();
request = im();
request = placeAll("\n", "");
c。向客户端发送文本数据的代码
outWriter.println(strInfo);
outWriter.flush();
d)。向客户端发送文件的代码
// 发送文件长度
File file = new File(filePath);
byte[] outBytes = new byte[1024];
int count = 0;
FileInputStream fileInput = new FileInputStream(file); ByteArrayOutputStream ow = new ByteArrayOutputStream(); while ((count = ad(outBytes)) > 0) { MyLogManager.DebugLog(log, null, String.valueOf(count));
ow.write(outBytes, 0, count);
}
outPut.ByteArray());
//outWriter.print(ow);//这个在JAVA客户端时可以正常响应,而
在C#客户端中无法响应。
//outWriter.flush();
二、客户端(使用java和c#两个版本)
1).发送请求信息(字符串格式)
对于JAVA来说:直接使用PrintWrite类的println()方法即可。
而对于C#来说:需要使用socket.Send( + "\r"));需要在请求信息msg后面加上一个行结束标志符。
2).接收数据(文本或者文件)
2-1).java客户端接收数据
a)。java接收文本的代码示例:
******代码示例*****
log.info("开始连接服务器");
InetAddress address = ByName(AppConfig.IP);//; SocketChannel sc = SocketChannel.open(new
InetSocketAddress(address,AppConfig.PORT));
log.info("服务器连接成功");
//连接成功初始化流
InputStream inputStream = wInputStream(sc); InputStreamReader is = new
InputStreamReader(inputStream,"GBK");
in = new BufferedReader(is);
log.info("接收服务器的数据");
String responseLine="";
while ((responseLine = in.readLine()) != null)
{
//用readLine接收数据是,会自动抛弃换行符,如果为了保持数据的格式,需要在这里加上一个换行标识符
returnStr += responseLine+"\n";
}
log.info("接收服务器的数据完毕");
**************
b.)java接收文件的示例代码:
*****代码示例*****
log.info("开始连接服务器");
InetAddress address = ByName("");//; SocketChannel sc = SocketChannel.open(new InetSocketAddress(address,AppConfig.PORT));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论