java - 通信 tcp server c/client java
问题描述
我在交流服务器和 Java 客户端之间的通信方面遇到了一些问题。
我如何接受 c
void *connection_handler(void* args){
int sock = *(int*)args;
char op_code [sizeof(uint8_t)];
char len [sizeof(uint8_t)];
while(true){
if(read(sock,&op_code,(sizeof(uint8_t)))==0 || atoi(op_code)==0)
{printf("Error reading op_code\n");break;}
if(read(sock,&len,(sizeof(uint8_t)))==0 || atoi(len)==0)
{printf("Error reading len\n");break;}
printf("op code->%d\n",atoi(op_code));
printf("len ->%d\n",atoi(len));
}
printf("Client is now disconnected\n");
close(sock);
free((int*)args);
pthread_exit(0);
}
我如何连接到服务器并在 java 中发送数据
private void connectToServer(){
try {
SocketAddress sockaddr =
new InetSocketAddress(MainActivity.SERVER_IP, MainActivity.SERVER_PORT);
socket = new Socket();
socket.connect(sockaddr, 3000);
dataOutputStream = new DataOutputStream(socket.getOutputStream());
Log.d(TAG, "doInBackground: connesso");
}
catch (SocketTimeoutException te) {
Log.d(TAG, "doInBackground: non connesso, time out exeption" + te);
sendDataToActivity(MainActivity.ERROR, MainActivity.TIME_OUT_EXEPTION);
te.printStackTrace();
}
catch (IOException e) {
Log.d(TAG, "doInBackground: non connesso" + e);
e.printStackTrace();
}
}
/**
* Send message to server.
* @param username
* @param psw
*/
public void sendSignIn (String username,String psw){
new Thread(){
public void run(){
//Invio il command_code e la lunghezza del messaggio al server
try {
dataOutputStream.writeBytes("1");
// dataOutputStream.close();
dataOutputStream.writeBytes("2");
//dataOutputStream.writeBytes(username);
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
此代码的输出
op_code -> 12 (Should be 1 but can't understand why my read read both)
len -> 2
可能问题是由 op_code 和 len 的大小引起的,但老实说我不明白如何解决它。有人可以照亮我吗?
解决方案
推荐阅读
- git - 如何为 Sourcetree 上的每个文件添加相应的注释?
- python - 在 get_queryset 中返回一个 Http 响应
- javascript - 如何在javascript中的另一个对象数组中查找数组的长度
- c# - 我怎样才能提高我的数据库加载时间?
- swift - MapKit 中的中心位置在 UiLabel 中不可见
- javascript - 如何从内部 HTML 文件运行 React 代码?
- php - 选择的复选框值到不同的页面
- java - 当使用一个对象作为字段(关联)与方法参数(依赖)作为另一个对象内部时
- swift - 如何在 swift 3.0 中使用 performSegue?
- javascript - 如何在javascript中将数组值一一分配给setTimeout