1. 程式人生 > >基於linux的socket實現簡易QQ程式碼

基於linux的socket實現簡易QQ程式碼

網路程式設計示例,寫一個簡單的QQ程式

伺服器端

#include<arpa/inet.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<stdio.h>
#include<time.h>
#define port 8888
char* getDateTime();
int main()
{
    //定義伺服器 客戶端的套接字描述符
int sfd=0,cfd=0,ret=0,addrlen=0,count=0; char * nowtime; //定義接收快取區 unsigned char ReadBuffer[1024]; unsigned char SendBuffer[1024]; //定義伺服器 客戶端的套接字資料結構 struct sockaddr_in saddr,caddr; //資料結構清0 memset(&saddr,0,sizeof(struct sockaddr)); memset(&caddr,0,sizeof(struct sockaddr)); //建立伺服器套接字
sfd=socket(AF_INET,SOCK_STREAM,0); //判斷 if(sfd == -1) { perror("socket"); exit(-1); } //初始化伺服器套接字資料結構 saddr.sin_family = AF_INET; saddr.sin_port = htons(port); saddr.sin_addr.s_addr = INADDR_ANY; bzero(saddr.sin_zero,8); //套接字繫結 ret = bind(sfd,(struct
sockaddr*)(&saddr),sizeof(struct sockaddr)); if(ret == -1) { perror("bind"); exit(-1); } //監聽設定 ret=listen(sfd,10); if(ret == -1) { perror("listen"); exit(-1); } while(1) { //接收等待 addrlen = sizeof(struct sockaddr); cfd=accept(sfd,(struct sockaddr*)(&caddr),&addrlen); if(cfd == -1) { perror("accept"); } printf("從機ip是%s\n",inet_ntoa(caddr.sin_addr)); if(fork()==0) { while(1) { if(fork()==0) { fgets(SendBuffer,1024,stdin); send(cfd,SendBuffer,1024,0); printf("\n"); } nowtime=getDateTime(); count= recv(cfd,ReadBuffer,1024,0); //printf("count is %d\n",count); ReadBuffer[count]='\0'; printf("李京京 %s\n",nowtime); printf("%s\n",ReadBuffer); } } } } char* getDateTime() { static char nowtime[20]; time_t rawtime; struct tm* ltime; time(&rawtime); ltime=localtime(&rawtime); strftime(nowtime,20,"%Y-%m-%d %H:%M:%S",ltime); return nowtime; }

客戶端

#include<arpa/inet.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<stdio.h>
#include<time.h>
#define port 8888
char* getDateTime();
int main(int argc,char **argv)
{
    //定義伺服器 客戶端的套接字描述符
    int cfd=0,ret=0;

    char * nowtime;
    //定義接收快取區
    unsigned char SendBuffer[1024];
    unsigned char ReadBuffer[1024];
    //定義伺服器 客戶端的套接字資料結構
    struct sockaddr_in saddr,caddr;

    //資料結構清0
    memset(&saddr,0,sizeof(struct sockaddr));
    memset(&caddr,0,sizeof(struct sockaddr));

    //建立伺服器套接字
    cfd=socket(AF_INET,SOCK_STREAM,0);

    //判斷
    if(cfd == -1)
    {
        perror("socket");
        exit(-1);
    }

    //初始化伺服器套接字資料結構
    caddr.sin_family = AF_INET;
    caddr.sin_port  = htons(port);
    inet_aton(argv[1],&caddr.sin_addr);
    bzero(caddr.sin_zero,8);
    ret = connect(cfd,(struct sockaddr*)(&caddr),sizeof(struct sockaddr));
    if(ret == -1)
    {
        perror("ret");
        exit(-1);
    }
    while(1)
    {
        if(fork()==0)
        {
            nowtime=getDateTime();
            ret=recv(cfd,ReadBuffer,1024,0);
            printf("張超 %s\n",nowtime);
            ReadBuffer[ret]='\0';
            printf("%s\n",ReadBuffer);
        }
        fgets(SendBuffer,1024,stdin);
        send(cfd,SendBuffer,1024,0);
        printf("\n");
    }
}

char* getDateTime()
{
    static char nowtime[20];
    time_t rawtime;
    struct tm* ltime;
    time(&rawtime);
    ltime=localtime(&rawtime);
    strftime(nowtime,20,"%Y-%m-%d %H:%M:%S",ltime);
    return nowtime;
}

程式碼執行效果

客戶機端操作

root@DESKTOP-FR31BP0:/mnt/e/mycode/socket/mytcp# ./myclient 192.168.1.2
你好

哈哈哈

張超 2018-08-23 08:47:49
nihao

張超 2018-08-23 08:47:43
hahaha

伺服器端操作

root@DESKTOP-FR31BP0:/mnt/e/mycode/socket/mytcp# ./myserver
從機ip是192.168.1.2
李京京 2018-08-23 08:47:38
你好

李京京 2018-08-23 08:47:43
哈哈哈

nihao

hahaha

相關推薦

基於linux的socket實現簡易QQ程式碼

網路程式設計示例,寫一個簡單的QQ程式 伺服器端 #include<arpa/inet.h> #include<string.h> #include<stdlib.h> #include<sys/types.h&

Java 基於JavaMail實現QQ郵箱傳送郵件

需求 最近專案在做新聞爬蟲,想實現這個功能:爬蟲某個頁面失敗後,把這個頁面的 url 發到筆者的郵箱。最終實現的效果圖如下,後期可以加上過濾標籤、失敗狀態碼等,方便分類搜尋異常。 開發人員可以根據郵件裡的 url 和堆疊資訊,分析爬蟲失敗的原因。 是

基於appium實現的線性程式碼引用unittest單元測試框架

在前段時間,分享了幾篇關於appium基礎的博文,再加上期間也有講到unittest測試框架,所以今天就來一個專題,在appium+python實現的線性程式碼基礎上,引入unittest框架,使程式碼更簡潔。 之前的部落格,可以見以下連結快速閱讀: 基於Python的Appium環境搭建合集 Geny

Python基於Socket實現簡易多人聊天室

##前言 套接字(Sockets)是雙向通訊通道的端點。 套接字可以在一個程序內,在同一機器上的程序之間,或者在不同主機的程序之間進行通訊,主機可以是任何一臺有連線網際網路的機器。 套接字可以通過多種不同的通道型別實現:Unix域套接字,TCP,UDP等。 套接字型檔提供了處理公共傳輸的特定類,以及一個用於處

基於Tkinter用50行Python程式碼實現簡易計算器

Tkinter一般是python自帶的,所以程式碼不需要其他元件,本程式是在python2.7版本實現的。   主要涉及了tkinter的使用,函式定義和呼叫,匿名函式的使用,類成員函式定義等python基礎知識,適合新手學習。  程式碼如下: from Tkinter

Android實戰簡易教程-第二十六槍(基於ViewPager實現微信頁面切換效果)

stat addview data android tid des viewpage 聊天 == 1.頭部布局文件top.xml:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

【機器學習】最容易實現基於OpenCV的人臉檢測程式碼、檢測器及檢測效果

基於opencv自帶的人臉檢測模型,實現簡單的人臉檢測功能,可作為機器學習初學者練手使用。簡單易學,具體的方法及程式碼如下。 1、執行結果 輸入原圖 輸出結果 2、工程需要載入的opencv庫如下: 3、用到的人臉檢測器 4、具體實現程式碼 #

隱馬爾科夫演算法之實現簡易版的拼音輸入法程式碼詳解

這段時間瞭解了隱馬爾科夫演算法,然後拼音輸入法的核心就是HMM,然後從github上找了一個輸入法實現的程式碼來更透徹的理解演算法,本文程式碼來源:https://github.com/LiuRoy/Pinyin_Demo,如果侵權,請聯絡我刪除!!! 一、 拼音輸入法的原理概述 1.主要原

No.24 我與程式碼的日常:C語言實現簡易通訊錄

#define SIZE 1000 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> typedef struct PersonInfo{ char name[102

基於阿里雲物聯網平臺,我們這樣實現簡易出入監控

本文通過一個簡單例項,主要介紹瞭如何使用樹莓派快速接入阿里雲iot platform,並實現了一個簡易的監控人員出入並拍照上送釘釘群的場景 場景 在公司大門入口處布點樹莓派和紅外感應,實現出入口人員出入時,自動拍照並上送釘釘群機器人 準備 物料準備

基於ArrayList實現HashMap程式碼

package hashMap; import java.util.ArrayList; import java.util.List; /**  * 基於ArrayList的實現hashMap  *     效率不高  新增 刪除

基於LinkedList實現HashMap程式碼

package hashMap; import java.util.LinkedList; import connection.Linked; /**  * 基於連結串列實現hashMap  * @author 蔣子文  *  */ publi

基於epoll實現的c++聊天室(全程式碼

早些時候為了更加熟悉網路程式設計,所以寫了一個聊天程式練練手,但那是純linux終端實現的,沒有介面,最近心血來潮翻出來加了個Qt的簡單介面,成了一個簡易的區域網聊天室,通過tcp伺服器來轉發訊息,其實最初實現的時候無介面情況下已經實現了單聊群聊檔案傳輸,udp檔案傳輸還實現

基於teradata的python模組實現簡易的客戶端

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2018-09-07 20:48:11 # @Author : Sheldon ([email protected]) # @Version : 0.0.1 import

用java實現基於字元的簡易收銀臺系統

從整體上來說,這個簡易系統分為以下四個部分:店主、顧客、關於、退出。各部分應該實現的功能如下圖: 整體框架程式碼 public static Scanner reader = new Scanner(System.in); public static void main

JS實現簡易版貪吃蛇小遊戲(純js程式碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head&

使用MUI 實現模仿QQ向左滑動出現刪除,編輯的程式碼

/* 使出現的錯誤隱藏[Intervention] Unable to preventDefault inside passive event listener due to target being treated as */

H5移動端實現仿QQ空間照片上傳效果程式碼

//獲取檔案url function createObjectURL(blob){ if (window.URL){ return window.URL.c

基於RFID的簡易圖書管理系統設計與實現

  本次開發主要做了從串列埠分別獲取讀者卡號和圖書卡號,實現圖書管理,圖書借閱,讀者管理等功能。開發語言是C#,開發環境使用Visual Studio 2015。資料庫採用sql Server。   RFID選擇   讀者卡跟圖書卡均採用125K,一般稱之為低頻卡,典型的

基於HtmlUnit實現簡單登入、頁面跳轉以及獲取有用資料部分程式碼示例(示例網站:大潤發)

首先,我們將要獲取的目標內容為商戶訂單查詢結果: 如下程式碼為登入模組程式碼(由於驗證碼解析這部分目前沒做,只能手動識別): /** * * @param username 使用者 * @param password