- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在提问之前搜索过这个问题,但找不到类似的东西。我开发了一个客户端/服务器解决方案来发送/接收 HL7 消息。我正在使用套接字将客户端连接到服务器,并且通过该连接我可以使用 OutputSteam 对象仅发送 1 条 HL7 消息。如何在同一个套接字连接中发送多个 HL7?我尝试了不同的方法,但它们都不能正常工作。
这是我的客户端代码片段:
//Create socket that is connected to server on specified port
System.out.println("Connecting to Server....");
Socket socket = new Socket(ipServer, serverPort);
System.out.println("Connected to Server");
StringBuffer HL7Message1 = new StringBuffer();
//Message 1
HL7Message1
.append(START_BLOCK)
.append("MSH|^~\\&|NES|NINTENDO|TESTSYSTEM|TESTFACILITY|20010101000000||ADT^A04|Q000000000000000001|P|2.3")
.append(CARRIAGE_RETURN)
.append("EVN|A04|20010101000000|||^KOOPA^BOWSER^^^^^^^CURRENT")
.append(CARRIAGE_RETURN)
.append("PID|1||123456789|0123456789^AA^^JP|BROS^MARIO^HELLO^WORLD^ONE^||19850101000000|M|||123 FAKE STREET^MARIO \\T\\ LUIGI BROS PLACE^TOADSTOOL KINGDOM^NES^A1B2C3^JP^HOME^^1234|1234|(555)555-0123^HOME^JP:1234567|||S|MSH|12345678|||||||0|||||N")
.append(CARRIAGE_RETURN)
.append("NK1|1|PEACH^PRINCESS^^^^|SO|ANOTHER CASTLE^^TOADSTOOL KINGDOM^NES^^JP|(123)555-1234|(123)555-2345|NOK|||||||||||||")
.append(CARRIAGE_RETURN)
.append("NK1|2|TOADSTOOL^PRINCESS^^^^|SO|YET ANOTHER CASTLE^^TOADSTOOL KINGDOM^NES^^JP|(123)555-3456|(123)555-4567|EMC|||||||||||||")
.append(CARRIAGE_RETURN)
.append("PV1|1|O|ABCD^EFGH^|||^^|123456^DINO^YOSHI^^^^^^MSRM^CURRENT^^^NEIGHBOURHOOD DR NBR^|^DOG^DUCKHUNT^^^^^^^CURRENT||CRD|||||||123456^DINO^YOSHI^^^^^^MSRM^CURRENT^^^NEIGHBOURHOOD DR NBR^|AO|0123456789|1|||||||||||||||||||MSH||A|||20010101000000"
)
.append(CARRIAGE_RETURN)
.append("IN1|1|PAR^PARENT||||LUIGI")
.append(CARRIAGE_RETURN)
.append("IN1|2|FRI^FRIEND||||PRINCESS")
.append(CARRIAGE_RETURN)
.append(END_BLOCK)
.append(CARRIAGE_RETURN);
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
//Send the MLLP-wrapped HL7 message to the server
out.write(HL7Message1.toString().getBytes());
byte[] byteBuffer = new byte[200];
in.read(byteBuffer);
System.out.println("Received from Server: " + new String(byteBuffer));
从服务器端
public String getMessage(InputStream anInputStream) throws IOException {
boolean end_of_message = false;
StringBuffer parsedMessage = new StringBuffer();
int characterReceived = 0;
try {
characterReceived = anInputStream.read();
} catch (SocketException e) {
System.out
.println("Unable to read from socket stream. "
+ "Connection may have been closed: " + e.getMessage());
return null;
}
if (characterReceived == END_OF_TRANSMISSION) {
return null;
}
if (characterReceived != START_OF_BLOCK) {
throw new RuntimeException(
"Start of block character has not been received");
}
while (!end_of_message) {
characterReceived = anInputStream.read();
if (characterReceived == END_OF_TRANSMISSION) {
throw new RuntimeException(
"Message terminated without end of message character");
}
if (characterReceived == END_OF_BLOCK) {
characterReceived = anInputStream.read();
if (characterReceived != CARRIAGE_RETURN) {
throw new RuntimeException(
"End of message character must be followed by a carriage return character");
}
end_of_message = true;
} else {
parsedMessage.append((char) characterReceived);
}
}
如何在同一套接字连接中发送更多 HL7 消息?
最佳答案
您真正想做的是将套接字与数据分开。我建议使用 TCP Client Server像这样一个来管理你的套接字。然后您只需向您的客户写一条消息即可。我有一项服务可以为我做这件事。基本上,我打包了 HL7 的任何字符串,看起来你已经知道如何做了,然后调用 TCP 服务器的 Send 方法。
我的看起来像这样,但我认为链接中的看起来类似:
public int Send(string data)
{
TcpClient sender = new TcpClient();
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, Port);
try
{
TcpServerConnection cn;
if (connections.Count == 0)
{
//if there are no connections then we end up here.
ConnectSocket(sender, localEP);
}
cn = connections[0];
if (cn.Socket.Connected && cn.verifyConnected())
{
cn.sendData(data);
return connections.Count;
}
cn.Socket.Close();
ConnectSocket(sender, localEP);
if (cn.Socket.Connected && cn.verifyConnected())
{
cn.sendData(data);
return connections.Count;
}
cn.Socket.Close();
return -1;
}
catch (Exception e)
{
}
}
正如您所看到的,重要的部分是 TCP 服务器确定是否有可用的套接字,并在必要时打开一个。然后它沿着线路发送数据。我认为如果您不将 TCP 的传输/编码与 HL7 消息传递分开,您将会遇到很多困难。如果你想等待MLLP版本2的ACK,我亲自拉出ACK中的出站消息ID和返回消息ID并比较它们:
if (lastOutMessageID == lastOutAckID || lastOutMessageID == "")
{
lastOutMessageID = SendNextHL7Message;
}
然后我监听 ACK,并对传入的数据引发一个事件:
void _contractManager_OnAckReceived(string msgID, string ackStatus)
{
lastOutAckID = msgID;
lastOutStatus = ackStatus;
lastAckTime = DateTime.Now;
outRetries = 0;
DoNextHL7();
}
但简短的版本是在自己的类中管理传输和套接字,然后仅发送和等待来自它们的数据。
关于java - 在同一个Socket连接中发送多个HL7消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709348/
我认为我正在努力正确定义以下不明确的操作码:LD HL,SP+r8 和 JP (HL) 操作码 (0xE9) > 和 0xF8 分别) 在我的实现中,LD HL,SP+r8 将 HL 设置为 SP+r
我尝试创建一个多线程单例模式类。 标题: class HL{ public: static HL* getInstance(); ......... priva
Windows 7、Emacs 25.1 如果我想改变 hl-line 的背景颜色,我会这样做: (set-face-background 'hl-line "#333333") 好的。但是如何为 h
我使用的是 solr 3.5,并在我的搜索查询中设置了 hl.fragsize = 100 ,但我的片段不完全包含 100 个字符,事实上,平均片段大小是 120。 任何人都可以对这个问题有想法吗?
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
这可以通过以下方式实现: 11 pop hl 10 push hl 在 21 个周期内。我发现的唯一选择是 ex (sp),hl,它需要 19 个周期。缺点是内容必须在我处理完它们后才能恢复到原来的值
我有一个动态文本字段 bar_*在我的索引中,并希望 Solr 返回该字段的突出显示。所以我运行的是: q=gold&hl=true&hl.fl=bar_* 它按预期工作,但以防万一我向 hl.fl
我使用以下代码在全局范围内启用 hl-mode。 (global-hl-line-mode t) 在指定模式下关闭 hl-line 功能。我用下面的代码来做。 (add-hook 'org-mode-
Emacs的hl-line-mode正是我所需要的,但我想更改为可怕的黄色,有人知道我该怎么做吗? 最佳答案 我使用(set-face-background hl-line-face "gray13"
我通过评估突出显示当前行: (hl-line-mode) 也可以全局设置: (global-hl-line-mode nil) 问题是这种方式行突出显示会覆盖highlight-phrase。所以我的
我使用波纹管代码来保护一段 .net 程序。我们选择使用 api 而不是经典的 Envelope 方法,因为我们想要自定义行为而不仅仅是普通窗口“找不到 key ” 我的问题是如何保护供应商代码,因为
我通常让 hl-line 对当前背景采用稍暗的阴影。这在编辑缓冲区时效果很好。但是,在某些缓冲区中,例如 Org 议程和 Gnus 组缓冲区,我想使用更漂亮的颜色(代替光标)。 具体来说,我想更改 g
我使用 Cocoa Emacs 23.1.91,并且我希望始终关闭 hl-line-mode,因为我不喜欢使用它。我可以通过 M-x hl-line-mode 为每个缓冲区关闭它,但这很乏味。任何帮助
我只想知道是否可以制作一个标签或任何其他整数并将其显示到我的游戏 View 中。 var pvElf = SKLabelNode(fontNamed:"Chalkduster") pvElf.text
好的。好吧,我知道这个问题很有可能会在前 10 分钟内结束,但我还是要问这个问题,因为我已经花了将近一天半的时间来寻找解决方案。仍然,我无法弄清楚这一点。尽管有演示,但在 Internet 上甚至在
当我启用 hl-line-mode 时,文件的最后一行只突出显示到它的最后一个字符(如果该行为空,则根本不会突出显示),而不是像其他行一样一直突出显示。一个肮脏的修复是在文件末尾添加一个空行,但我想知
标题基本概括了所有内容。当我:source $MYVIMRC或 :source ~/.vimrc ,重新出现上次搜索。我可以用 :noh 轻松地再次关闭它,但每次我都会重新出现 :source . 这
我们如何配置(或修复?)hl-line,使其背景高亮显示在堆栈中的最后(或第一个?)。 也就是说:如果 hl-line 突出显示某些单词已经具有背景颜色的行,则 hl-line 不应使用自己的背景颜色
使用 solr,我尝试使用 hl.formatter 选项和 hl.simple.pre/post 突出显示一些文本。 我的问题是 hl.simple.pre/post 代码有时没有出现在突出显示的结
我正在尝试为 dired 模式启用 hl-line-mode,但它不起作用。启用 global-hl-mode 有效,但它是每个缓冲区,而不仅仅是我不想要的缓冲区。 (defun hl-mode-fo
我是一名优秀的程序员,十分优秀!