socket TCP通信实例

/*
 * tcpserver.cpp
 *
 *  Created on: Mar 7, 2011
 *      Author: root
 */
#include<iostream>
#include<sys/socket.h>
#include<sys/types.h>
#include<stdlib.h>
#include<string.h>
#include<netinet/in.h>
#include<stdio.h>
#include <netdb.h>

#include <unistd.h>
#include <arpa/inet.h>

#define MAXSIZE 100
#define SERVER_PORT 10000

using namespace std;

int main(int arg, int arv[]) {
 int sockfd, new_fd;
 struct sockaddr_in serveraddr, clientaddr;
 sockfd = socket(AF_INET, SOCK_STREAM, 0);
 if (sockfd == -1) {
  cout << "socket err !" << endl;
  exit(1);
 }
 bzero(&serveraddr, sizeof(serveraddr));
 serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
 serveraddr.sin_port = htons(SERVER_PORT);
 serveraddr.sin_family = AF_INET;
 if (bind(sockfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) == -1) {
  cout << "bind err" << endl;
  exit(1);
 }
 if (listen(sockfd, MAXSIZE) == -1) {
  cout << "listen err" << endl;
  exit(1);
 }
 cout << "TCP server start success !" << endl;
 socklen_t sin_size;
 while (1) {
  sin_size = sizeof(struct sockaddr_in);
  if ((new_fd
    = accept(sockfd, (struct sockaddr *) &clientaddr, &sin_size))
    == -1) {
   cout << "accept err" << endl;
   continue;
  }
  cout << "get connect from :" << inet_ntoa(clientaddr.sin_addr) << endl;
  if (fork() == 0) {
   if (send(new_fd, "hello client /n", 14, 0) == -1) {
    cout << "send err" << endl;
   }
   char buff[100];
   int re;
   if ((re=recv(new_fd, buff, 100, 0)) >0 ) {
    cout << "from client :" << inet_ntoa(clientaddr.sin_addr)
      << "  " << buff << endl;
   } else {
    cout << "recver nothing " <<re<< endl;
   }
  }
  close(new_fd);
 }
}

 

/*
 * TCPclient.cpp
 *
 *  Created on: Mar 7, 2011
 *      Author: root
 */
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<iostream>
#include<unistd.h>
#include<stdlib.h>
#include <arpa/inet.h>

#define BUFFSIZE 100

using namespace std;

int main(int arg, char* arv[]) {
 struct sockaddr_in serveraddr;
 bzero(&serveraddr, sizeof(serveraddr));
 serveraddr.sin_family = AF_INET;
 if (arg < 3) {
  if (inet_pton(AF_INET, "127.0.0.1", &serveraddr.sin_addr) <= 0) {
   cout << "Initializing server ip err " << endl;
   exit(1);
  }
  serveraddr.sin_port = htons(10000);
 } else {
  if (inet_pton(AF_INET, arv[1], &serveraddr.sin_addr) <= 0) {
   cout << "Initializing server ip err " << endl;
   exit(1);
  }
  int port = atoi(arv[2]);
  serveraddr.sin_port = htons(port);
 }
 int sockfd;
 if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  cout << "socket err" << endl;
  exit(1);
 }
 if (connect(sockfd, (struct sockaddr*) &serveraddr, sizeof(serveraddr))
   != 0) {
  cout << "connect err " << endl;
  exit(1);
 }
 char buff[BUFFSIZE];
 int revfd;
 revfd = recv(sockfd, buff, BUFFSIZE, 0);
 if (revfd > 0) {
  cout << "recver from server :" << buff << endl;
 }
 if (send(sockfd, "hello server /n", 20, 0) == -1) {
  cout << "send message to server err !" << endl;
 } else {
  cout<<"send success !"<<endl;
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值