我有一个Java服务器,想向iOS应用程序发送String消息。
发送理论上是可行的,但我的应用程序中总是收到"。我尝试了不同的编码方式,如ASCII、Unicode、UTF-16。
我的Java发送方法如下:
public void sendName(String str) {
try {
System.out.println("Send: "+str);
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(str.getBytes(StandardCharsets.US_ASCII));
} catch (IOException ex) {
}
}
我的目标C接收方法是这样的:
- (void)readFromStream{
uint8_t buffer[1024];
int len;
NSMutableString *total = [[NSMutableString alloc] init];
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
[total appendString: [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding]];
NSLog(@"%@",total);
}
}
}
有人知道怎么了吗?谢谢:)
您应该尝试使用PrintStream
或BufferedOutputStream
而不是ObjectOutputStream
。因为ObjectOutputStream
听起来像是在发送对象String
,而不仅仅是字符串。
public void sendName(String str)
{
PrintStream ps = null;
try
{
System.out.println("Send: "+str);
ps = new PrintStream(s.getOutputStream());
ps.println(str);
ps.flush();
} catch (IOException ex)
{
}
finally
{
if(ps != null)
ps.close();
}
}
或
public void sendName(String str)
{
BufferedOutputStream bos = null;
try
{
System.out.println("Send: "+str);
bos = new BufferedOutputStream(s.getOutputStream());
bos.write(str.getBytes(StandardCharsets.US_ASCII));
bos.flush();
} catch (IOException ex)
{
}
finally
{
if(bos!= null)
bos.close();
}
}