1. 程式人生 > >linux c++ socket入門之tcp server端

linux c++ socket入門之tcp server端

tcp_server.h

#include <unistd.h>
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>

#define MAXSIZE 1024

class tcp_server
{
private:
        int socket_fd,accept_fd;
        sockaddr_in myserver;
        sockaddr_in remote_addr;

public:
        tcp_server(int listen_port);
        int recv_msg();
};


tcp_server.cpp

#include "tcp_server.h"

tcp_server::tcp_server(int listen_port) {

        if(( socket_fd = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0 ){
                throw "socket() failed";
        }

        memset(&myserver,0,sizeof(myserver));
        myserver.sin_family = AF_INET;
        myserver.sin_addr.s_addr = htonl(INADDR_ANY);
        myserver.sin_port = htons(listen_port);

        if( bind(socket_fd,(sockaddr*) &myserver,sizeof(myserver)) < 0 ) {
                throw "bind() failed";
        }

        if( listen(socket_fd,10) < 0 ) {
                throw "listen() failed";
        }
}

int tcp_server::recv_msg() {

        while( 1 ) {

                socklen_t sin_size = sizeof(struct sockaddr_in);
                if(( accept_fd = accept(socket_fd,(struct sockaddr*) &remote_addr,&sin_size)) == -1 )
                {
                        throw "Accept error!";
                        continue;
                }
                printf("Received a connection from %s\n",(char*) inet_ntoa(remote_addr.sin_addr));

                if( !fork() ) {
                        char buffer[MAXSIZE];
                        memset(buffer,0,MAXSIZE);
                        if( ( read(accept_fd,buffer,MAXSIZE)) < 0 ) {
                                throw("Read() error!");
                        } else {
                                printf("Received message: %s\n",buffer);
                                break;
                        }
                        exit(0);
                }
                close(accept_fd);
        }
        return 0;
}


main.cpp

#include <iostream>
#include <tcp_server.h>

int main(int argc,char* argv[])
{
        tcp_server ts(atoi(argv[1]));
        ts.recv_msg();
        return 0;
}
編譯
g++ -c tcp_server.cpp -o tcp_server.o
g++ -g tcp_server.o main.cpp -I. -o main


 執行

./main 9527


客戶端測試

telnet server_ip 9527


伺服器端響應

client(IP:192.168.99.1) connected.

相關推薦

linux c++ socket入門tcp server

tcp_server.h #include <unistd.h> #include <iostream> #include <sys/socket.h> #incl

linux c++ socket入門tcp client .

main.cpp #include <iostream> #include <tcp_client.h> using namespace std; int main(int

C#程式設計 socket程式設計tcp伺服器和客戶

基於Tcp協議的Socket通訊類似於B/S架構,面向連線,但不同的是伺服器端可以向客戶端主動推送訊息。 使用Tcp協議通訊需要具備以下幾個條件: (1).建立一個套接字(Socket) (2).繫結伺服器端IP地址及埠號--伺服器端 (3).利用Listen()方法開啟監聽--伺服

跨平臺C++伺服器程式開發 (4)tcp socket狀態圖(server

套接字狀態 在上一節中,介紹了檔案描述符的概念,我們可以看到socket套接字與磁碟檔案的讀寫方法很相似,但套接字比普通的檔案描述符多了一種狀態,每個開啟的套接字都對應一種狀態,Windows和Linux都可以使用netstat命令檢視。 通過觀察套接字狀態

Linuxsocket程式設計多程序TCP伺服器

程式碼如下: tcp_server.c #include<string.h> #include<stdlib.h> #include<stdio.h> #include<sys/types.h> #includ

linux一切皆檔案tcp socket描述符(三)

一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 二、環境準備 元件 版本

洞悉C++網路程式設計tcp/ip和socket api

原文地址:https://blog.csdn.net/libaineu2004/article/details/79020403 TCP(Transmission Control Protocol) 傳輸控制協議 三次握手 TCP是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次

WPAS是C/S結構中的Serverlinux平臺目前常用的Clientwpa_cli

wpa_supplicant是一個開源軟體專案,它實現了Station對無線網路進行管理和控制的功能。wpa_supplicant有兩個版本,分別是6和8。版本6中沒有網絡卡作為Soft AP相關原始碼。目錄結構如下:  ·hostapd:當手機進入Soft AP模式時,手機

C#程式設計 socket程式設計udp伺服器和客戶

基於Udp協議是無連線模式通訊,佔用資源少,響應速度快,延時低。至於可靠性,可通過應用層的控制來滿足。(不可靠連線) 使用Udp協議通訊需要具備以下幾個條件: (1).建立一個套接字(Socket) (2).繫結伺服器端IP地址及埠號--伺服器端 (3).通過SendTo()方法向指

Socket程式設計TCP例項(附C/C++程式碼詳解)

說明: 主要分步驟給出Windows平臺下socket程式設計的一個TCP例項;使用WINDOWS下網路程式設計規範Winsock完成網路通訊; 對程式各部分細節進行描述。 套接字有三種傳輸型別SOCK_STREAM    SOCK_DGRAM   SOCK_RAW;

MFC Socket網路程式設計TCP客戶

如果想要做一個和Socket有關的MFC軟體, 在建立基本對話方塊時需要點選Windows套接字;然後方可進行Socket有關操作; 如果沒有點,可以在標頭檔案之前寫上 #pragma comment

Linuxsocket程式設計多執行緒TCP伺服器

程式碼如下: thread_server.c #include<string.h> #include<stdlib.h> #include<stdio.h> #include<sys/types.h> #i

socket C/C++程式設計(8)server多執行緒處理clients佇列

1. 採用C++11的標準執行緒庫(linux之pthread為例)實現多執行緒(test.cpp) #include <stdio.h> #include <string.h> #ifdef WIN32 #include

linux C函數strdup函數分析

c函數之strdup函數分析一.函數分析1.函數原型:#include <string.h>char *strdup(const char *s); 2.功能:strdup()函數主要是拷貝字符串s的一個副本,由函數返回值返回,這個副本有自己的內存空間,和s沒有關聯。strdup函數復制一個字符串

C/S模型TCP群聊

cpp etl word client inet_addr accep 應用程序 with value 說明:利用TCP協議和多線程實現群聊功能。一個服務器,多個客戶端(同一個程序多次啟動)。客戶端向服務端發送數據,由服務端進行轉發到其他客戶端。 /服務端 // WSAS

網絡駭客入門TCP並發網頁服務器

TCP 並發服務器 網絡駭客入門之TCP並發網頁服務器TCP並發服務器本來準備寫在網絡駭客入門之TCP編程後面的,但是因為代碼有點長,所以就單獨寫了一篇註意:因為瀏覽器發送的數據比較多,所以作為本服務器的接受緩沖區recv_buf要大點,至少512字節,建議1024字節如果接收不全的話,無論如何都不能

Pythontcp server模擬Http通訊

1.python tcp server程式碼: 1 import socket 2 3 4 def main(): 5 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 6

Socket程式設計TCP的簡單實現

Client import java.io.*; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.Socket; public class Client { pub

C# socket 程式設計 accept() 函式返回值解析

accept() 函式會返回一個新的套接字,這個新的套接字在伺服器端與客戶端進行通訊。 伺服器端的繫結監聽是一個套接字,與客戶端通訊的是另一個套接字(accept函式返回的套接字,注意這裡不是返回客戶端的套接字,返回的套接字是新建立在伺服器上的,與客戶端收發訊息用的) 下面這段程式碼,是

python下socket程式設計TCP連線狀態

1. 引言 python作為一門膠水語言,可以在各個領域上作為快速開發的工具,大大提高開發者處理事務的效率。在網際網路行業中,不管是對網路伺服器的開發,還是對網路客戶端,例如爬蟲的開發中,都會涉及到底層的執行原理,那就是socket程式設計,那麼今天,我們將對python下的socke