Я хочу отправлять сообщения на «push-сервер Samsung Tizen».
Я сделал ту же программу, используя C #, WebRequest.
Программа работает очень хорошо.
Сейчас я делаю ту же программу на C.
Но программа, кажется, не взаимодействует должным образом.
Это исходный код программы на C #.
private string SendTizenPushServer()
{
string resultStr;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://apkorea.push.samsungosp.com:8090/spp/pns/api/push");
request.Method = "POST";
request.ContentType = "application/json;charset=utf-8;";
request.Headers.Add(string.Format("appID:xxxMy_appIDxxx"));
request.Headers.Add(string.Format("appSecret:xxxMy_appSecretxxx"));
var postData = new {
regID = "xxxMy_regIDxxx",
requestID = "0000001",
message = "alertMessage=Hi",
};
string contentMsg = JsonConvert.SerializeObject(postData);
Debug.WriteLine("contentMsg = " + contentMsg);
Byte[] byteArray = Encoding.UTF8.GetBytes(contentMsg);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
try
{
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
resultStr = reader.ReadToEnd();
Debug.WriteLine("response: " + resultStr);
reader.Close();
responseStream.Close();
response.Close();
}
catch (Exception e)
{
resultStr = "";
Debug.WriteLine(e.Message);
}
}
Результат работы этой программы:
"{\"results\":[{\"regID\":\"xxxMy_regIDxxx\",\"requestID\":\"0000001\",\"statusCode\":1000,\"statusMsg\":\"Success\"}]}"
И оборудование Tizen также получило данные как обычно.
Моя проблема в программе на Си. Это исходный код моей программы на C, использующий winsock2.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
#define MAXLINE 4096
SSIZE_T SendTizenPushServer()
{
// newtwork value
char sendData[MAXLINE + 1], recvData[MAXLINE + 1], data[MAXLINE + 1];
SSIZE_T n;
WSADATA wsaData;
SOCKET fcmSocket;
struct hostent *hostent;
SOCKADDR_IN sockAddr;
// samsung push server host name
char *hname = "apkorea.push.samsungosp.com";
// network setting
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
printf("WSAStartup failed.\n");
return 0;
}
if ((hostent = gethostbyname(hname)) == NULL)
{
printf("gethostbyname error for host: %s:",hname);
return 0;
}
fcmSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (fcmSocket == INVALID_SOCKET)
{
printf("Socket failed.\n");
return 0;
}
memset(&sockAddr, 0, sizeof(sockAddr));
sockAddr.sin_family = PF_INET;
sockAddr.sin_addr.s_addr = inet_addr(inet_ntoa(*(struct in_addr*)*hostent->h_addr_list));
sockAddr.sin_port = htons(8090);
if (connect(fcmSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR)
{
printf("Connect failed.\n");
return 0;
}
sprintf(data,
"{\"regID\":\"xxxMy_regIDxxx\","
"\"requestID\":\"00000001\","
"\"message\":\"alertMessage=Hi\""
"}\r\n");
sprintf(sendData,
// Header
"POST /spp/pns/api/push HTTP/1.1\r\n"
"appID: xxxMy_appIDxxxx\r\n"
"appSecret: xxxxMy_appSecretxxxx\r\n"
"Host: %s:8090\r\n"
"Content-Type: application/json\r\n"
"Content-Length: %d\r\n\r\n"
// Data
"%s", hname, strlen(data), data);
printf("send data : \n%s\n\n", sendData);
send(fcmSocket, sendData, strlen(sendData), 0);
while ((n = recv(fcmSocket, recvData, MAXLINE, 0)) > 0)
{
recvData[n] = '\0';
printf("recv : %s\n\n", recvData);
}
closesocket(fcmSocket);
WSACleanup;
return n;
}
Нет ответа при запуске программы.
Нет даже ответа об ошибке.
Если appID или RegID были неправильными, я получил сообщение, что это неправильно в программе на C #.
Но в программе на Си нет ответа.
В чем проблема? Пожалуйста, помогите мне. T.T