ロゴ:EPSON
ロゴ:よくあるご質問(FAQ)

製品別
質問別

URLをクリップボードにコピーしました
シェア用URL:https://faq2.epson.jp/web/Detail.aspx?id=32252
  FAQ番号:32252
ソケット通信を使ったアプリケーションの開発について
ソケット(TCP)通信を利用して、印刷やプリンターステータスを取得するためのプログラミングを教えてください。
 
 

こちら の製品情報で紹介しています [ インテリジェントモデル ] 以外の TM プリンター(Ethernet / 無線 LAN インターフェイスモデル)は、TCP 9100 ポートによるダイレクト印刷をサポートしています。

アプリケーションまたはデバイスから、プリンターの TCP 9100 ポートへ直接データを送信することで制御できます。
送信するデータは、 こちら の ESC/POS コマンドが使用できます。

詳細につきましては、各インターフェイスの詳細取扱説明書をご参照ください。
詳細取扱説明書はこちらからダウンロード可能です。

Ethernet / 無線 LAN インターフェイスが受け付ける LPR / Port 9100 の接続要求数は次のとおりです。

  • Ethernetインターフェイス:UB-E01/02/02Aの場合は最大3つまで、UB-E03の場合は最大6つまで
  • 無線LANインターフェイス:UB-R02の場合は最大2つまで、UB-R03/03Aの場合は最大6つまで、UB-R04の場合は最大2つまで

ただし、実際にTMプリンターに対して印刷可能な接続は、最初に接続を受け付けた1つのみで、それ以外の接続要求は印刷中の接続がクローズされるまで待機状態となります。
また、ホストからデータが5分間送られてこない場合は、接続はクローズされます。

WindowsからEthernetを介して印刷するプログラム例(C言語)

/* TCP9100 programming sample for Win32
* HOW TO BUILD
* cl tcp9100.c wsock32.lib
*/
#include <stdio.h>
#include <winsock.h>

int main(int argc, char* argv[])
{
  WSADATA data;
  SOCKET sock;
  struct sockaddr_in addr;

  if (argc != 2) {
    printf("usage: tcp9100 IP_ADDRESS\n");
    exit(1);
  }

  /* Initialize windows sockets */
  WSAStartup(0x0101, &data);
  /* Create sockets */
  if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
    fprintf(stderr, "Error socket(): %d\n", WSAGetLastError());
    exit(1);
  }

  /* initialize the parameter */
  memset(&addr, 0, sizeof(addr));
  addr.sin_family = AF_INET;
  addr.sin_port = htons(9100);
  addr.sin_addr.s_addr = inet_addr(argv[1]);

  /* connect */
  if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
    fprintf(stderr, "Error connect(): %d\n", WSAGetLastError());
    exit(1);
  }
  printf("connected\n");

  /* send data */
  send(sock, "\x1b@SEIKO EPSON\x0a", 15, 0);

  /* close socket */
  closesocket(sock);
  return 0;
}

LinuxからEthernetを介して印刷するプログラム例(C言語)

/* TCP9100 programming sample for linux
* HOW TO BUILD
* cc tcp9100.c
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

int main(int argc, char* argv[])
  {
  int sockfd;
  struct sockaddr_in addr;
  if (argc != 2) {
    printf("usage: tcp9100 IP_ADDRESS\n");
    exit(1);
  }

  /* create socket */
  sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if (sockfd < 0) {
    perror("socket()");
    exit(1);
  }

  /* initialize the parameter */
  memset(&addr, 0, sizeof(addr));
  addr.sin_family = AF_INET;
  addr.sin_port = htons(9100);
  addr.sin_addr.s_addr = inet_addr(argv[1]);

  /* connect */
  if (connect(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
    perror("connect()");
  }
  printf("connected\n");

  /* send data */
  send(sockfd, "SEIKO EPSON\x0a", 13, 0);
  /* close socket */
  close(sockfd);
  return 0;
}
モバイルプリンター TM-P20,TM-P60II
TMシリーズ TM-L90 オートカッターモデル,TM-L90 ピーラーモデル,TM-T70,TM-T70II,TM-T88II,TM-T88III,TM-T88IV,TM-T88V,TM-T90,TM-T90 KP,TM-T90II
FAQ改善アンケート

このページの評価をお聞かせください。〇✖をお選びください。

 

■役に立った
■役に立たなかった