基於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