gpt4 book ai didi

java - ios slider 数据使用tcp套接字到java服务器

转载 作者:可可西里 更新时间:2023-11-01 02:54:43 26 4
gpt4 key购买 nike

我正在尝试制作一个简单的服务器客户端程序,该程序允许我将 slider 值从 IOS 客户端发送到 Java 服务器。我现在被困住了,因为我收到了我不知道如何处理的数据。我正在寻找一些指导。我将提供我目前拥有的客户端和服务器端代码。我想了解有关套接字的更多信息,并感谢我能得到的任何帮助。现在我只想能够从 IOS 发送一个字符串并用 java 将它打印到控制台。我只想从测试字符串开始。我的最终目标是通过将浮点值转换为字符串然后返回到 Java 端,将 slider 的值实时发送到服务器。

IOS 客户端代码

#import "ViewController.h"
@interface ViewController () <NSStreamDelegate>
@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
[self TcpClientInitialise];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)SliderDidChange:(id)sender {

UISlider *slider = (UISlider *)sender;
float val = slider.value;

self.SliderLabel.text = [NSString stringWithFormat:@"%f",val];
[self TcpClientInitialise];
NSString *response = @"HELLO1234";
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSUTF8StringEncoding]];

[OutputStream write:[data bytes] maxLength:[data length]]; //<<Returns actual number of bytes sent - check if trying to send a large number of bytes as they may well not have all gone in this write and will need sending once there is a hasspaceavailable event
NSLog(@"Sent data on output stream");
[InputStream close];
[OutputStream close];



}


- (void)TcpClientInitialise
{
NSLog(@"Tcp Client Initialise");

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;


CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"127.0.0.1", 7896, &readStream, &writeStream);

InputStream = (__bridge NSInputStream *)readStream;
OutputStream = (__bridge NSOutputStream *)writeStream;

[InputStream setDelegate:self];
[OutputStream setDelegate:self];

[InputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[OutputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[InputStream open];
[OutputStream open];
}
...
...
...

和Java代码...

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Handler;

public class TCPServer {


private static PrintStream outputStream;

@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.out.println("Main Test");
ServerSocket statusServer = null;
String number = null;
DataInputStream inputStream = null;
outputStream = null;
Socket clientSocket = null;

// Try to open a server socket on port 7896
try {
statusServer = new ServerSocket(7896);
System.out.println("ServerSocket status server made");
}
catch (IOException e) {
System.out.println(e);
System.out.println("status server failed");
}

// Create a socket object from the ServerSocket to listen and accept
// connections.
// Open input and output streams

try {
while(true){

System.out.println("waiting for socket accept");
clientSocket = statusServer.accept();
System.out.print("socket accepted and returns: ");
System.out.println(statusServer.accept());
inputStream = new DataInputStream(clientSocket.getInputStream());
number = inputStream.toString();
System.out.print("inputStream = ");
System.out.println(number);
inputStream.close();
clientSocket.close();

//outputStream = new PrintStream(clientSocket.getOutputStream());
}



} catch (IOException e) {
System.out.println(e);
}
}


}

我知道处理连接的方式非常草率,感谢任何建议。当我在 IOS 上移动 slider 时,我可以获得一些数据到 java 端,它在控制台中看起来像这样:

Main Test
ServerSocket status server made
waiting for socket accept
socket accepted and returns: Socket[addr=/127.0.0.1,port=61576,localport=7896]
inputStream = java.io.DataInputStream@2891fa78
waiting for socket accept
socket accepted and returns: Socket[addr=/127.0.0.1,port=61578,localport=7896]
inputStream = java.io.DataInputStream@5b8767ad

就是不知道怎么处理的java.io.DataInputStream@xxxxxxxx。

最佳答案

试试我的代码,它对我有用。

    NSInputStream *inputStream;
NSOutputStream *outputStream;
-(void) init{
NSURL *website = [NSURL URLWithString:@"http://YOUR HOST"];

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL,CFBridgingRetain([website host]),9876, &readStream, &writeStream);

inputStream = (__bridge_transfer NSInputStream *)readStream;
outputStream = (__bridge_transfer NSOutputStream *)writeStream;
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream open];
[inputStream open];

CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
}

- (void) sendMessage {

// it is important to add "\n" to the end of the line
NSString *response = @"Say hello to Ukraine**\n**";
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSUTF8StringEncoding]];
int sent = [outputStream write:[data bytes] maxLength:[data length]];
NSLog(@"bytes sent: %d",sent);

do{
uint8_t buffer[1024];
int bytes = [inputStream read:buffer maxLength:sizeof(buffer)];
NSString *output = [[NSString alloc] initWithBytes:buffer length:bytes encoding:NSUTF8StringEncoding];
NSLog(@"%@",output);
} while ([inputStream hasBytesAvailable]);
}

Java 服务器:

    public class ServerTest {
public static void main(String[] args) {
Thread thr = new Thread(new SocketThread());
thr.start();
}
}

class SocketThread implements Runnable {

@Override
public void run() {
try {
ServerSocket server = new ServerSocket(9876);
while (true) {
new SocketConnection(server.accept()).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

class SocketConnection extends Thread {
InputStream input;
PrintWriter output;
Socket socket;

public SocketConnection(Socket socket) {
super("Thread 1");
this.socket = socket;
try {
input = socket.getInputStream();
output = new PrintWriter(new OutputStreamWriter(
socket.getOutputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void run() {
try {
byte array[] = new byte[1024];
while (true) {
do {
int readed = input.read(array);
System.out.println("readed == " + readed + " "
+ new String(array).trim());
String sendString = new String(
"Hello Ukraine!".getBytes(),
Charset.forName("UTF-8"));
output.write(sendString);
output.flush();
} while (input.available() != 0);
}

} catch (IOException e) {
e.printStackTrace();
}
}
}

关于java - ios slider 数据使用tcp套接字到java服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17805145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com